diff options
author | Jeff King <peff@peff.net> | 2008-03-27 03:32:25 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-03-27 13:54:57 -0700 |
commit | ca7246864b43e9ea1922cc5386225ecd1b3bdd98 (patch) | |
tree | 9f38aee689bd5301e247ae146d6e8d6270bed335 /git-add--interactive.perl | |
parent | b717a627629e6886956af54274d507b9711d49e6 (diff) | |
download | git-ca7246864b43e9ea1922cc5386225ecd1b3bdd98.tar.gz |
add--interactive: allow user to choose mode update
When using the 'p'atch command, instead of just throwing out any mode
change, present it to the user in the same way that we show hunks.
This way, the mode change can be staged independently from the changes
to the contents.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-add--interactive.perl')
-rwxr-xr-x | git-add--interactive.perl | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 5cdda29c54..903953e68e 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -814,6 +814,36 @@ sub patch_update_file { for (@{$head->{DISPLAY}}) { print; } + + if (@{$mode->{TEXT}}) { + while (1) { + print @{$mode->{DISPLAY}}; + print colored $prompt_color, + "Stage mode change [y/n/a/d/?]? "; + my $line = <STDIN>; + if ($line =~ /^y/i) { + $mode->{USE} = 1; + last; + } + elsif ($line =~ /^n/i) { + $mode->{USE} = 0; + last; + } + elsif ($line =~ /^a/i) { + $_->{USE} = 1 foreach ($mode, @hunk); + last; + } + elsif ($line =~ /^d/i) { + $_->{USE} = 0 foreach ($mode, @hunk); + last; + } + else { + help_patch_cmd(''); + next; + } + } + } + $num = scalar @hunk; $ix = 0; @@ -936,6 +966,9 @@ sub patch_update_file { my $n_lofs = 0; my @result = (); + if ($mode->{USE}) { + push @result, @{$mode->{TEXT}}; + } for (@hunk) { my $text = $_->{TEXT}; my ($o_ofs, $o_cnt, $n_ofs, $n_cnt) = |