]> git.ipfire.org Git - thirdparty/git.git/blobdiff - apply.c
Merge branch 'km/submodule-doc-use-sm-path' into maint
[thirdparty/git.git] / apply.c
diff --git a/apply.c b/apply.c
index d57ac0d052b71a442575ae821d3beb3d64af6036..fab44322c5f27952842b6bcfe48bd5e5f8a3c739 100644 (file)
--- a/apply.c
+++ b/apply.c
@@ -450,7 +450,7 @@ static char *find_name_gnu(struct strbuf *root,
 
        /*
         * Proposed "new-style" GNU patch/diff format; see
-        * https://public-inbox.org/git/7vll0wvb2a.fsf@assigned-by-dhcp.cox.net/
+        * https://lore.kernel.org/git/7vll0wvb2a.fsf@assigned-by-dhcp.cox.net/
         */
        if (unquote_c_style(&name, line, NULL)) {
                strbuf_release(&name);
@@ -2661,6 +2661,16 @@ static int find_pos(struct apply_state *state,
        unsigned long backwards, forwards, current;
        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