On Thu, Aug 17, 2017 at 04:41:09AM -0400, Jeff King wrote: > diff --git a/apply.c b/apply.c > index 41ee63e1db..606db58218 100644 > --- a/apply.c > +++ b/apply.c > @@ -2966,8 +2966,9 @@ static int apply_one_fragment(struct apply_state *state, > * In other words, a hunk that is (frag->oldpos <= 1) with or > * without leading context must match at the beginning. > */ > - match_beginning = (!frag->oldpos || > - (frag->oldpos == 1 && !state->unidiff_zero)); > + match_beginning = (nth_fragment == 1 && > + (!frag->oldpos || > + (frag->oldpos == 1 && !state->unidiff_zero))); > > /* > * A hunk without trailing lines must match at the end. > > > But I'm not quite sure if that's right. The rest of the overlap code > seems to mark patched lines with a flag. Meaning that instead of giving > up and saying "well, this is the second line so we can't ever try > matching the beginning", we should be redefining "beginning" in that > case to allow 0 or more PATCHED lines starting from the beginning of the > file. Hmm, actually I was reading that part of the code backwards. We record the PATCHED flag _only_ when allow_overlap isn't set, not the other way around. So I had been imagining we'd want something like this: diff --git a/apply.c b/apply.c index 41ee63e1db..4048751807 100644 --- a/apply.c +++ b/apply.c @@ -2489,8 +2489,11 @@ static int match_fragment(struct apply_state *state, return 0; } - if (match_beginning && try_lno) - return 0; + if (match_beginning) { + for (i = 0; i < try_lno; i++) + if (!(img->line[i].flag & LINE_PATCHED)) + return 0; + } /* Quick hash check */ for (i = 0; i < preimage_limit; i++) But that does the opposite of what we want: it makes this case work when --allow-overlap isn't specified. I think my first attempt is probably closer to the right direction (but we'd want to have it kick in only when --allow-overlap is specified; well formed patches shouldn't overlap but we'd want to barf loudly if they do). I'll stop here for now before digging any further. I'm not all that familiar with the apply code, so I have a feeling Junio's comments may stop me from going down an unproductive dead end. :) -Peff