Junio C Hamano <gitster@xxxxxxxxx> writes: > Wincent Colaiuta <win@xxxxxxxxxxx> writes: > >> @@ -56,9 +56,14 @@ sub list_modified { >> my ($only) = @_; >> my (%data, @return); >> my ($add, $del, $adddel, $file); >> + my @tracked = grep { >> + defined run_cmd_pipe(qw(git ls-files >> + --exclude-standard --), $_) >> + } @ARGV; >> + return if $#tracked == -1 && $#ARGV != -1; > > Eek. why? > > Did you mean to say: > > my @tracked = run_cmd_pipe(gw(git ls-files --exclude-standard --) @ARGV); > > It would also make sense to use --error-unmatch and perhaps --with-tree=HEAD > like git-commit.sh does. Actually, the ls-files need to be chomped, but I'd prefer to run -z form of the command and split with NUL. Does run_cmd_pipe() crap^Wstuff support that? On top of: * refactor patch_update_cmd, * teach builtin-add to pass multiple paths, * add path-limiting to git-add--interacgtive (with an obvious suggested above), the attached patch teaches [p]atch subcommand to take multiple selections. With these, you can do: $ git add -i 'u*.h' What now> p staged unstaged path 1: unchanged +1/-0 unpack-trees.h 2: unchanged +1/-0 utf8.h Patch update>> * diff --git a/unpack-trees.h b/unpack-trees.h ... Stage this hunk [y/n/a/d/?]? y ... diff --git a/utf8.h b/utf8.h ... -- >8 -- git-add -i: allow multiple selection in [p]atch subcommand This allows more than one files from the list to be chosen from the patch subcommand instead of going through the file one by one. This also updates the "list-and-choose" UI for usability. When the prompt ends with ">>", if you type '*' to choose all choices, the prompt immediately returns the choice without requiring an extra empty line to confirm the selection. --- diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 9236ffc..372dc2c 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -256,7 +256,7 @@ sub list_and_choose { $chosen[$i] = $choose; } } - last if ($opts->{IMMEDIATE}); + last if ($opts->{IMMEDIATE} || $line eq '*'); } for ($i = 0; $i < @stuff; $i++) { if ($chosen[$i]) { @@ -563,12 +563,12 @@ sub patch_update_cmd { @mods = grep { !($_->{BINARY}) } @mods; return if (!@mods); - my ($it) = list_and_choose({ PROMPT => 'Patch update', - SINGLETON => 1, - IMMEDIATE => 1, - HEADER => $status_head, }, - @mods); - patch_update_file($it->{VALUE}) if ($it); + my (@them) = list_and_choose({ PROMPT => 'Patch update', + HEADER => $status_head, }, + @mods); + for (@them) { + patch_update_file($_->{VALUE}); + } } sub patch_update_file { - 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