Jonathan Nieder <jrnieder@xxxxxxxxx> writes: > In the spirit of the recent similar change for 'git add -u', avoid > pestering users that restrict their attention to a subdirectory and > will not be affected by the coming change in the behavior of pathless > 'git add -A'. > > Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> > --- > As before. Have you considered implementing this by adding a separate check immediately after fill_directory() to inspect the paths in dir with the same strncmp_icase() against the prefix, without touching prune_directory() at all? I suspect that would be much cleaner and easier to change in the version boundary. Same comment about measuring the size of the working tree and the area the user is working on applies to this. After Git 2.0, we would still want to advise users who say "git add -A" without pathspecs to see if the user would have been better off with an explicit ".", so unless advice.addUAuseexplicitdot is set to false, we would still want to inspect the result from fill_directory (and in that case we won't be calling into prune_directory). > builtin/add.c | 21 ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/builtin/add.c b/builtin/add.c > index 4d8d441..2493493 100644 > --- a/builtin/add.c > +++ b/builtin/add.c > @@ -170,7 +170,9 @@ int add_files_to_cache(const char *prefix, const char **pathspec, int flags) > return !!data.add_errors; > } > > -static char *prune_directory(struct dir_struct *dir, const char **pathspec, int prefix) > +#define WARN_IMPLICIT_DOT (1u << 0) > +static char *prune_directory(struct dir_struct *dir, const char **pathspec, > + int prefix, unsigned flag) > { > char *seen; > int i, specs; > @@ -187,6 +189,16 @@ static char *prune_directory(struct dir_struct *dir, const char **pathspec, int > if (match_pathspec(pathspec, entry->name, entry->len, > prefix, seen)) > *dst++ = entry; > + else if (flag & WARN_IMPLICIT_DOT) > + /* > + * "git add -A" was run from a subdirectory with a > + * new file outside that directory. > + * > + * "git add -A" will behave like "git add -A :/" > + * instead of "git add -A ." in the future. > + * Warn about the coming behavior change. > + */ > + warn_pathless_add(); > } > dir->nr = dst - dir->entries; > add_pathspec_matches_against_index(pathspec, seen, specs); > @@ -433,8 +445,6 @@ int cmd_add(int argc, const char **argv, const char *prefix) > } > if (option_with_implicit_dot && !argc) { > static const char *here[2] = { ".", NULL }; > - if (prefix && addremove) > - warn_pathless_add(); > argc = 1; > argv = here; > implicit_dot = 1; > @@ -475,9 +485,10 @@ int cmd_add(int argc, const char **argv, const char *prefix) > } > > /* This picks up the paths that are not tracked */ > - baselen = fill_directory(&dir, pathspec); > + baselen = fill_directory(&dir, implicit_dot ? NULL : pathspec); > if (pathspec) > - seen = prune_directory(&dir, pathspec, baselen); > + seen = prune_directory(&dir, pathspec, baselen, > + implicit_dot ? WARN_IMPLICIT_DOT : 0); > } > > if (refresh_only) { -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html