Add path-limiting to git-add--interactive

Implement Junio's suggestion that git-add--interactive should reproduce the
path-limiting semantics of non-interactive git-add.

In otherwords, if "git add -i" (unrestricted) shows paths from a set A,
"git add -i paths..." should show paths from a subset of the set A and that
subset should be defined with the existing ls-files pathspec semantics.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Wincent Colaiuta 2007-11-22 02:36:24 +01:00 committed by Junio C Hamano
parent 7c0ab44589
commit 4c8416847a

View File

@ -37,7 +37,7 @@ sub list_untracked {
chomp $_; chomp $_;
$_; $_;
} }
run_cmd_pipe(qw(git ls-files --others --exclude-standard --), @_); run_cmd_pipe(qw(git ls-files --others --exclude-standard --), @ARGV);
} }
my $status_fmt = '%12s %12s %s'; my $status_fmt = '%12s %12s %s';
@ -56,9 +56,17 @@ sub list_modified {
my ($only) = @_; my ($only) = @_;
my (%data, @return); my (%data, @return);
my ($add, $del, $adddel, $file); my ($add, $del, $adddel, $file);
my @tracked = ();
if (@ARGV) {
@tracked = map {
chomp $_; $_;
} run_cmd_pipe(qw(git ls-files --exclude-standard --), @ARGV);
return if (!@tracked);
}
for (run_cmd_pipe(qw(git diff-index --cached for (run_cmd_pipe(qw(git diff-index --cached
--numstat --summary HEAD))) { --numstat --summary HEAD --), @tracked)) {
if (($add, $del, $file) = if (($add, $del, $file) =
/^([-\d]+) ([-\d]+) (.*)/) { /^([-\d]+) ([-\d]+) (.*)/) {
my ($change, $bin); my ($change, $bin);
@ -81,7 +89,7 @@ sub list_modified {
} }
} }
for (run_cmd_pipe(qw(git diff-files --numstat --summary))) { for (run_cmd_pipe(qw(git diff-files --numstat --summary --), @tracked)) {
if (($add, $del, $file) = if (($add, $del, $file) =
/^([-\d]+) ([-\d]+) (.*)/) { /^([-\d]+) ([-\d]+) (.*)/) {
if (!exists $data{$file}) { if (!exists $data{$file}) {