commit - bf96b38c46b379b2b7152ad0fea31e5c7010667e
commit + 0dbc22715b295b0b4fd65dfdc2ea1cd9c16083a7
blob - 374ed5e84b7472ab124872d9e03621f6e9df94da
blob + 4918b9815d97ab43818a60e09a23c8b86ee2b46c
--- got/got.1
+++ got/got.1
.Bl -column YXZ description
.It M Ta modified file
.It ! Ta versioned file was expected on disk but is missing
+.It ~ Ta versioned file is obstructed by a non-regular file
.It ? Ta unversioned item not tracked by
.Nm
.El
blob - 58867aeefb5aa093575f36499d23069e9b3225aa
blob + 879b57cd0208cf79072ecdeb708d1ac92b8acef4
--- include/got_worktree.h
+++ include/got_worktree.h
#define GOT_STATUS_MODIFIY 'M'
#define GOT_STATUS_MISSING '!'
#define GOT_STATUS_UNVERSIONED '?'
+#define GOT_STATUS_OBSTRUCTED '~'
/*
* Attempt to initialize a new work tree on disk.
blob - 6f599b37e0cabf93027c510b787ac569c4c0beaa
blob + 063b75f59617e22294410e617be93d20187bab57
--- lib/worktree.c
+++ lib/worktree.c
if (lstat(abspath, &sb) == -1)
return got_error_from_errno();
- if (!S_ISREG(sb.st_mode))
+ if (!S_ISREG(sb.st_mode)) {
+ *status = GOT_STATUS_OBSTRUCTED;
return NULL;
+ }
if (ie->ctime_sec == sb.st_ctime &&
ie->ctime_nsec == sb.st_ctimensec &&
blob - 787e05f69344a61688a6493bbc4e89b9ecea0096
blob + d6d36bcc7878ddddaba818d1e6e754ba3c3f787d
--- regress/cmdline/status.sh
+++ regress/cmdline/status.sh
test_done "$testroot" "0"
}
+function test_status_obstructed {
+ local testroot=`test_init status_obstructed`
+
+ got checkout $testroot/repo $testroot/wt > /dev/null
+ if [ "$?" != "0" ]; then
+ test_done "$testroot" "$?"
+ return 1
+ fi
+
+ rm $testroot/wt/epsilon/zeta
+ mkdir $testroot/wt/epsilon/zeta
+
+ echo '~ epsilon/zeta' > $testroot/stdout.expected
+
+ (cd $testroot/wt && got status > $testroot/stdout)
+
+ cmp $testroot/stdout.expected $testroot/stdout
+ if [ "$?" != "0" ]; then
+ diff -u $testroot/stdout.expected $testroot/stdout
+ test_done "$testroot" "$?"
+ return 1
+ fi
+
+ test_done "$testroot" "0"
+}
+
run_test test_status_basic
run_test test_status_subdir_no_mods
run_test test_status_subdir_no_mods2
+run_test test_status_obstructed