commit - b8bad2ba42b397e4040667df22fbd795f6c796f6
commit + 2a06fe5f59f1b7b42f63bd9afe5187935c341321
blob - bc24b56fe9ee8b371a400a11357acd2fe46e4a65
blob + 45c8c5cc48c35aa3cd1e7e967be8cc112febeff7
--- got/got.1
+++ got/got.1
.It \(a~ Ta versioned file is obstructed by a non-regular file
.It ? Ta unversioned item not tracked by
.Nm
+.It N Ta non-existent
+.Ar path
+specified on the command line
.El
.Pp
If no
blob - 9ae1a22c521640c7b65b692d41af663d2e4fb9df
blob + 34e071967697fcabd8e050f2be3856f67a3cacee
--- got/got.c
+++ got/got.c
} else {
if (staged_status == GOT_STATUS_DELETE)
return NULL;
+ if (status == GOT_STATUS_NONEXISTENT)
+ return got_error_set_errno(ENOENT, path);
if (status != GOT_STATUS_MODIFY &&
status != GOT_STATUS_ADD &&
status != GOT_STATUS_DELETE &&
{
fprintf(stderr, "usage: %s remove [-f] file-path ...\n", getprogname());
exit(1);
+}
+
+static const struct got_error *
+print_remove_status(void *arg, unsigned char status,
+ unsigned char staged_status, const char *path,
+ struct got_object_id *blob_id, struct got_object_id *staged_blob_id,
+ struct got_object_id *commit_id)
+{
+ if (status == GOT_STATUS_NONEXISTENT)
+ return NULL;
+ if (status == staged_status && (status == GOT_STATUS_DELETE))
+ status = GOT_STATUS_NO_CHANGE;
+ printf("%c%c %s\n", status, staged_status, path);
+ return NULL;
}
static const struct got_error *
goto done;
error = got_worktree_schedule_delete(worktree, &paths,
- delete_local_mods, print_status, NULL, repo);
+ delete_local_mods, print_remove_status, NULL, repo);
if (error)
goto done;
done:
blob - 1bd4eff4c92e7c57dc9166775ec5c8efd2916fec
blob + 096c4e4ceac795c28e6da4fba2b9be6fd783015b
--- include/got_worktree.h
+++ include/got_worktree.h
#define GOT_STATUS_MISSING '!'
#define GOT_STATUS_UNVERSIONED '?'
#define GOT_STATUS_OBSTRUCTED '~'
+#define GOT_STATUS_NONEXISTENT 'N'
#define GOT_STATUS_REVERT 'R'
#define GOT_STATUS_CANNOT_DELETE 'd'
#define GOT_STATUS_BUMP_BASE 'b'
blob - 30b65e930802c67ccebb4b4023d1ba02f176761e
blob + 9a7c693b6fe913d70e282679c979cb7a7af850c3
--- lib/worktree.c
+++ lib/worktree.c
if (lstat(ondisk_path, &sb) == -1) {
if (errno != ENOENT)
return got_error_from_errno2("lstat", ondisk_path);
+ return (*status_cb)(status_arg, GOT_STATUS_NONEXISTENT,
+ GOT_STATUS_NO_CHANGE, path, NULL, NULL, NULL);
return NULL;
}
if (status == GOT_STATUS_UNVERSIONED)
return NULL;
+ if (status == GOT_STATUS_NONEXISTENT)
+ return got_error_set_errno(ENOENT, relpath);
ie = got_fileindex_entry_get(a->fileindex, relpath, strlen(relpath));
if (ie == NULL)
case GOT_STATUS_CONFLICT:
err = got_error_path(relpath, GOT_ERR_STAGE_CONFLICT);
break;
+ case GOT_STATUS_NONEXISTENT:
+ err = got_error_set_errno(ENOENT, relpath);
+ break;
default:
err = got_error_path(relpath, GOT_ERR_FILE_STATUS);
break;
blob - e7cea61d9e58dea9e040440ecd3b58e1fd85df0e
blob + 455469c47cd574f5fca1a82ebd6b9e3e680dc5e8
--- regress/cmdline/diff.sh
+++ regress/cmdline/diff.sh
ret="$?"
if [ "$ret" != "0" ]; then
diff -u $testroot/stdout.expected $testroot/stdout
+ test_done "$testroot" "$ret"
+ return 1
fi
+
+ # diff non-existent path
+ (cd $testroot/wt && got diff nonexistent > $testroot/stdout \
+ 2> $testroot/stderr)
+
+ echo -n > $testroot/stdout.expected
+ cmp -s $testroot/stdout.expected $testroot/stdout
+ ret="$?"
+ if [ "$ret" != "0" ]; then
+ diff -u $testroot/stdout.expected $testroot/stdout
+ test_done "$testroot" "$ret"
+ return 1
+ fi
+
+ echo "got: nonexistent: No such file or directory" \
+ > $testroot/stderr.expected
+ cmp -s $testroot/stderr.expected $testroot/stderr
+ ret="$?"
+ if [ "$ret" != "0" ]; then
+ diff -u $testroot/stderr.expected $testroot/stderr
+ fi
test_done "$testroot" "$ret"
}
blob - e7fb40ff27a838ef389cac5d09189a21b2d212d1
blob + abe364148a3057cd534860385de545c80bb5367b
--- regress/cmdline/stage.sh
+++ regress/cmdline/stage.sh
(cd $testroot/wt && got stage nonexistent-file \
> $testroot/stdout 2> $testroot/stderr)
- echo "got: no changes to stage" > $testroot/stderr.expected
+ echo "got: nonexistent-file: No such file or directory" \
+ > $testroot/stderr.expected
cmp -s $testroot/stderr.expected $testroot/stderr
ret="$?"
if [ "$ret" != "0" ]; then
blob - ec4a92da12fc55731c312cca75266994641a944b
blob + 1cdd63392f3e865270de6ffdb9b10cb96f773a41
--- regress/cmdline/update.sh
+++ regress/cmdline/update.sh
fi
# beta is now gone... we don't flag tree conflicts yet
- echo -n > $testroot/stdout.expected
+ echo "N beta" > $testroot/stdout.expected
echo -n > $testroot/stderr.expected
(cd $testroot/wt && got status beta > $testroot/stdout \
2> $testroot/stderr)