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>
This commit is contained in:
Jeff King 2008-03-27 03:32:25 -04:00 коммит произвёл Junio C Hamano
Родитель b717a62762
Коммит ca7246864b
2 изменённых файлов: 44 добавлений и 1 удалений

Просмотреть файл

@ -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) =

Просмотреть файл

@ -70,9 +70,19 @@ test_expect_success 'patch does not affect mode' '
git reset --hard &&
echo content >>file &&
chmod +x file &&
printf "y\\n" | git add -p &&
printf "n\\ny\\n" | git add -p &&
git show :file | grep content &&
git diff file | grep "new mode"
'
test_expect_success 'stage mode but not hunk' '
git reset --hard &&
echo content >>file &&
chmod +x file &&
printf "y\\nn\\n" | git add -p &&
git diff --cached file | grep "new mode" &&
git diff file | grep "+content"
'
test_done