Skip to content

Commit

Permalink
Merge branch 'jk/maint-add--interactive-delete' into maint
Browse files Browse the repository at this point in the history
* jk/maint-add--interactive-delete:
  add-interactive: fix bogus diff header line ordering
  • Loading branch information
Junio C Hamano committed Mar 8, 2010
2 parents 493e433 + e1327ed commit 9194513
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
24 changes: 23 additions & 1 deletion git-add--interactive.perl
Original file line number Diff line number Diff line change
Expand Up @@ -957,6 +957,28 @@ sub coalesce_overlapping_hunks {
return @out;
}

sub reassemble_patch {
my $head = shift;
my @patch;

# Include everything in the header except the beginning of the diff.
push @patch, (grep { !/^[-+]{3}/ } @$head);

# Then include any headers from the hunk lines, which must
# come before any actual hunk.
while (@_ && $_[0] !~ /^@/) {
push @patch, shift;
}

# Then begin the diff.
push @patch, grep { /^[-+]{3}/ } @$head;

# And then the actual hunks.
push @patch, @_;

return @patch;
}

sub color_diff {
return map {
colored((/^@/ ? $fraginfo_color :
Expand Down Expand Up @@ -1453,7 +1475,7 @@ sub patch_update_file {

if (@result) {
my $fh;
my @patch = (@{$head->{TEXT}}, @result);
my @patch = reassemble_patch($head->{TEXT}, @result);
my $apply_routine = $patch_mode_flavour{APPLY};
&$apply_routine(@patch);
refresh();
Expand Down
8 changes: 8 additions & 0 deletions t/t2016-checkout-patch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,14 @@ test_expect_success 'git checkout -p HEAD^' '
verify_state dir/foo parent parent
'

test_expect_success 'git checkout -p handles deletion' '
set_state dir/foo work index &&
rm dir/foo &&
(echo n; echo y) | git checkout -p &&
verify_saved_state bar &&
verify_state dir/foo index index
'

# The idea in the rest is that bar sorts first, so we always say 'y'
# first and if the path limiter fails it'll apply to bar instead of
# dir/foo. There's always an extra 'n' to reject edits to dir/foo in
Expand Down

0 comments on commit 9194513

Please sign in to comment.