add -p: do not attempt to coalesce mode changes
In0392513
(add-interactive: refactor mode hunk handling, 2009-04-16), we merged the interaction loops for mode changes and hunk staging. This was fine at the time, because0beee4c
(git-add--interactive: remove hunk coalescing, 2008-07-02) removed hunk coalescing. However, in7a26e65
(Revert "git-add--interactive: remove hunk coalescing", 2009-05-16), we resurrected it. Since then, the code would attempt in vain to merge mode changes with diff hunks, corrupting both in the process. We add a check to the coalescing loop to ensure it only looks at diff hunks, thus skipping mode changes. Noticed-by: Kirill Smelkov <kirr@mns.spb.ru> Signed-off-by: Thomas Rast <trast@student.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
87ca2eaade
commit
3d792161b1
@ -841,6 +841,10 @@ sub coalesce_overlapping_hunks {
|
|||||||
my ($last_o_ctx, $last_was_dirty);
|
my ($last_o_ctx, $last_was_dirty);
|
||||||
|
|
||||||
for (grep { $_->{USE} } @in) {
|
for (grep { $_->{USE} } @in) {
|
||||||
|
if ($_->{TYPE} ne 'hunk') {
|
||||||
|
push @out, $_;
|
||||||
|
next;
|
||||||
|
}
|
||||||
my $text = $_->{TEXT};
|
my $text = $_->{TEXT};
|
||||||
my ($o_ofs) = parse_hunk_header($text->[0]);
|
my ($o_ofs) = parse_hunk_header($text->[0]);
|
||||||
if (defined $last_o_ctx &&
|
if (defined $last_o_ctx &&
|
||||||
|
@ -164,7 +164,7 @@ test_expect_success FILEMODE 'stage mode but not hunk' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
test_expect_failure FILEMODE 'stage mode and hunk' '
|
test_expect_success FILEMODE 'stage mode and hunk' '
|
||||||
git reset --hard &&
|
git reset --hard &&
|
||||||
echo content >>file &&
|
echo content >>file &&
|
||||||
chmod +x file &&
|
chmod +x file &&
|
||||||
|
Loading…
Reference in New Issue
Block a user