Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2019-12-06 16:08:25 +0300
committerJunio C Hamano <gitster@pobox.com>2019-12-06 19:57:34 +0300
commitb4bbbbd5a247e0e75d079bca591b657ec9084a46 (patch)
treec575eff7b820e1524541268242d8b9965050831b /apply.c
parent89c8559367aae771006cc0956b6f5e54cc8c614c (diff)
apply --allow-overlap: fix a corner case
Yes, yes, this is supposed to be only a band-aid option for `git add -p` not Doing The Right Thing. But as long as we carry the `--allow-overlap` option, we might just as well get it right. This fixes the case where one hunk inserts a line before the first line, and is followed by a hunk whose context overlaps with the first one's and which appends a line at the end. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'apply.c')
-rw-r--r--apply.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/apply.c b/apply.c
index f8a046a6a5..720a631eaa 100644
--- a/apply.c
+++ b/apply.c
@@ -2662,6 +2662,16 @@ static int find_pos(struct apply_state *state,
int backwards_lno, forwards_lno, current_lno;
/*
+ * When running with --allow-overlap, it is possible that a hunk is
+ * seen that pretends to start at the beginning (but no longer does),
+ * and that *still* needs to match the end. So trust `match_end` more
+ * than `match_beginning`.
+ */
+ if (state->allow_overlap && match_beginning && match_end &&
+ img->nr - preimage->nr != 0)
+ match_beginning = 0;
+
+ /*
* If match_beginning or match_end is specified, there is no
* point starting from a wrong line that will never match and
* wander around and wait for a match at the specified end.