summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-07-29 12:38:22 -0700
committerJunio C Hamano <gitster@pobox.com>2019-07-29 12:38:22 -0700
commit689204ca8862a25be7bd7f91a42fbdf46cfb2a56 (patch)
tree3e889b66f7d0b4d43ceb072e17ac527807d5ac67
parentMerge branch 'rs/avoid-overflow-in-midpoint-computation' into maint (diff)
parentadd -p: fix checkout -p with pathological context (diff)
downloadgit-689204ca8862a25be7bd7f91a42fbdf46cfb2a56.tar.xz
git-689204ca8862a25be7bd7f91a42fbdf46cfb2a56.zip
Merge branch 'pw/add-p-recount' into maint
"git checkout -p" needs to selectively apply a patch in reverse, which did not work well. * pw/add-p-recount: add -p: fix checkout -p with pathological context
-rwxr-xr-xgit-add--interactive.perl6
-rwxr-xr-xt/t3701-add-interactive.sh8
2 files changed, 13 insertions, 1 deletions
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 20eb81cc92f..da5b4ec4bc5 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -972,7 +972,11 @@ sub coalesce_overlapping_hunks {
next;
}
if ($ofs_delta) {
- $n_ofs += $ofs_delta;
+ if ($patch_mode_flavour{IS_REVERSE}) {
+ $o_ofs -= $ofs_delta;
+ } else {
+ $n_ofs += $ofs_delta;
+ }
$_->{TEXT}->[0] = format_hunk_header($o_ofs, $o_cnt,
$n_ofs, $n_cnt);
}
diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh
index 65dfbc033a0..69991a3168f 100755
--- a/t/t3701-add-interactive.sh
+++ b/t/t3701-add-interactive.sh
@@ -639,4 +639,12 @@ test_expect_success 'add -p patch editing works with pathological context lines'
test_cmp expected-2 actual
'
+test_expect_success 'checkout -p works with pathological context lines' '
+ test_write_lines a a a a a a >a &&
+ git add a &&
+ test_write_lines a b a b a b a b a b a > a&&
+ test_write_lines s n n y q | git checkout -p &&
+ test_write_lines a b a b a a b a b a >expect &&
+ test_cmp expect a
+'
test_done