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. > > Fix this by passing a character array to add_files_to_cache() to > collect the pathspec matching information and report the error and > exit 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 | 11 ++++++++++- > t/t2200-add-update.sh | 10 ++++++++++ > 2 files changed, 20 insertions(+), 1 deletion(-) > > diff --git a/builtin/add.c b/builtin/add.c > index dc4b42d0ad..88261b0f2b 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); > @@ -549,13 +550,20 @@ int cmd_add(int argc, const char **argv, const char *prefix) > > begin_odb_transaction(); > > + 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 && !add_renormalize && > + report_path_error(ps_matched, &pathspec)) { > + free(ps_matched); > + exit(1); > + } Shouldn't we pay attention to ignore_add_errors? The same comments about free'ing and exit code from the review on the previous step apply here, too. Other than that, looking good.