diff options
| -rwxr-xr-x | git-add--interactive.perl | 13 | ||||
| -rwxr-xr-x | t/t3701-add-interactive.sh | 43 | 
2 files changed, 45 insertions, 11 deletions
diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 982593c89e..131c2a4b38 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -275,20 +275,11 @@ sub list_modified {  	my ($only) = @_;  	my (%data, @return);  	my ($add, $del, $adddel, $file); -	my @tracked = (); - -	if (@ARGV) { -		@tracked = map { -			chomp $_; -			unquote_path($_); -		} run_cmd_pipe(qw(git ls-files --), @ARGV); -		return if (!@tracked); -	}  	my $reference = get_diff_reference($patch_mode_revision);  	for (run_cmd_pipe(qw(git diff-index --cached  			     --numstat --summary), $reference, -			     '--', @tracked)) { +			     '--', @ARGV)) {  		if (($add, $del, $file) =  		    /^([-\d]+)	([-\d]+)	(.*)/) {  			my ($change, $bin); @@ -313,7 +304,7 @@ sub list_modified {  		}  	} -	for (run_cmd_pipe(qw(git diff-files --numstat --summary --raw --), @tracked)) { +	for (run_cmd_pipe(qw(git diff-files --numstat --summary --raw --), @ARGV)) {  		if (($add, $del, $file) =  		    /^([-\d]+)	([-\d]+)	(.*)/) {  			$file = unquote_path($file); diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh index 5ffe78e920..d8dcc977f2 100755 --- a/t/t3701-add-interactive.sh +++ b/t/t3701-add-interactive.sh @@ -394,4 +394,47 @@ test_expect_success 'diffs can be colorized' '  	grep "$(printf "\\033")" output  ' +test_expect_success 'add -p handles globs' ' +	git reset --hard && + +	mkdir -p subdir && +	echo base >one.c && +	echo base >subdir/two.c && +	git add "*.c" && +	git commit -m base && + +	echo change >one.c && +	echo change >subdir/two.c && +	git add -p "*.c" <<-\EOF && +	y +	y +	EOF + +	cat >expect <<-\EOF && +	one.c +	subdir/two.c +	EOF +	git diff --cached --name-only >actual && +	test_cmp expect actual +' + +test_expect_success 'add -p does not expand argument lists' ' +	git reset --hard && + +	echo content >not-changed && +	git add not-changed && +	git commit -m "add not-changed file" && + +	echo change >file && +	GIT_TRACE=$(pwd)/trace.out git add -p . <<-\EOF && +	y +	EOF + +	# we know that "file" must be mentioned since we actually +	# update it, but we want to be sure that our "." pathspec +	# was not expanded into the argument list of any command. +	# So look only for "not-changed". +	! grep not-changed trace.out +' +  test_done  | 
