Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx> writes: > When passing untracked path with -u option, it silently succeeds. There > is no error message and the exit code is zero. This is inconsistent > with other instances of git commands where the expected argument is a > known path. In those other instances, we error out when the path is > not known. > > Therefore, fix this by passing a character array to "Therefore, fix" -> "Fix". > add_files_to_cache() to collect the pathspec matching information and > report the error if a pathspec does not match any cache entry. Also add > a testcase to cover this scenario. > > Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx> > --- > builtin/add.c | 9 ++++++++- > t/t2200-add-update.sh | 6 ++++++ > 2 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/builtin/add.c b/builtin/add.c > index ffe5fd8d44..650432bb13 100644 > --- a/builtin/add.c > +++ b/builtin/add.c > @@ -370,6 +370,7 @@ int cmd_add(int argc, const char **argv, const char *prefix) > int add_new_files; > int require_pathspec; > char *seen = NULL; > + char *ps_matched = NULL; > struct lock_file lock_file = LOCK_INIT; > > git_config(add_config, NULL); > @@ -547,15 +548,20 @@ int cmd_add(int argc, const char **argv, const char *prefix) > string_list_clear(&only_match_skip_worktree, 0); > } > > + > begin_odb_transaction(); Unnecessary change. > + ps_matched = xcalloc(pathspec.nr, 1); > if (add_renormalize) > exit_status |= renormalize_tracked_files(&pathspec, flags); > else > exit_status |= add_files_to_cache(the_repository, prefix, > - &pathspec, NULL, > + &pathspec, ps_matched, > include_sparse, flags); > > + if (take_worktree_changes) > + exit_status |= report_path_error(ps_matched, &pathspec); Hmph, are we sure take_worktree_changes is true only when add_renormalize is false? > if (add_new_files) > exit_status |= add_files(&dir, flags); If report_path_error() detected that the pathspec were faulty, should we still proceed to add new files? This is NOT a rhetorical question, as I do not know the answer myself. I do not even know offhand what add_files_to_cache() above did when pathspec elements are not all consumed---if it does not complain and does not refrain from doing any change to the index, then we should follow suite and add_files() here, too. > @@ -568,6 +574,7 @@ int cmd_add(int argc, const char **argv, const char *prefix) > COMMIT_LOCK | SKIP_IF_UNCHANGED)) > die(_("unable to write new index file")); > > + free(ps_matched); > dir_clear(&dir); > clear_pathspec(&pathspec); > return exit_status; > diff --git a/t/t2200-add-update.sh b/t/t2200-add-update.sh > index c01492f33f..7cba325f08 100755 > --- a/t/t2200-add-update.sh > +++ b/t/t2200-add-update.sh > @@ -65,6 +65,12 @@ test_expect_success 'update did not touch untracked files' ' > test_must_be_empty out > ' > > +test_expect_success 'error out when passing untracked path' ' > + echo content >baz && > + test_must_fail git add -u baz 2>err && > + test_grep -e "error: pathspec .baz. did not match any file(s) known to git" err > +' > + > test_expect_success 'cache tree has not been corrupted' ' > > git ls-files -s |