@matheusbsbs / matheus-bagliano / commits / 3d792161b1
Fork 0

add -p: do not attempt to coalesce mode changes

In 0392513 (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, because 0beee4c (git-add--interactive: remove hunk coalescing, 2008-07-02) removed hunk coalescing. However, in 7a26e65 (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>

Thomas Rast committed Aug 15, 2009 at 15:56 UTC 3d792161b1c86632d5331bb30d6b7c6b17261f38
2 files changed +5 -1
git-add--interactive.perl
+4
@@ -841,6 +841,10 @@ sub coalesce_overlapping_hunks {
841 my ($last_o_ctx, $last_was_dirty);
842
843 for (grep { $_->{USE} } @in) {
844 + if ($_->{TYPE} ne 'hunk') {
845 + push @out, $_;
846 + next;
847 + }
848 my $text = $_->{TEXT};
849 my ($o_ofs) = parse_hunk_header($text->[0]);
850 if (defined $last_o_ctx &&
t/t3701-add-interactive.sh
+1 -1
@@ -164,7 +164,7 @@ test_expect_success FILEMODE 'stage mode but not hunk' '
164 '
165
166
167 -test_expect_failure FILEMODE 'stage mode and hunk' '
167 +test_expect_success FILEMODE 'stage mode and hunk' '
168 git reset --hard &&
169 echo content >>file &&
170 chmod +x file &&