Jeff King <peff@xxxxxxxx> writes: >> ... Hmm. I am not sure we would even need to treat hunks >> individually...the misplaced header lines should always be part of the >> _first_ hunk. > > Like this. Looks much better ;-). Thanks. > > git-add--interactive.perl | 24 +++++++++++++++++++++++- > t/t2016-checkout-patch.sh | 8 ++++++++ > 2 files changed, 31 insertions(+), 1 deletions(-) > > diff --git a/git-add--interactive.perl b/git-add--interactive.perl > index cd43c34..21f1330 100755 > --- a/git-add--interactive.perl > +++ b/git-add--interactive.perl > @@ -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 : > @@ -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(); > diff --git a/t/t2016-checkout-patch.sh b/t/t2016-checkout-patch.sh > index 4d1c2e9..2144184 100755 > --- a/t/t2016-checkout-patch.sh > +++ b/t/t2016-checkout-patch.sh > @@ -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 > -- > 1.7.0.207.g88f1 -- 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