Re: [PATCH 5/6] add -A: only show pathless 'add -A' warning when changes exist outside cwd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]