From: NeilBrown Date: Mon, 12 Nov 2012 23:57:45 +0000 (+1100) Subject: vpatch: ensure searching for 'next change' works. X-Git-Tag: v1.0~103 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=b21149b160159047abeda56487dda0f54bdeb82e;p=wiggle.git vpatch: ensure searching for 'next change' works. Now that AlreadyApplied may not cause multiple streams in the merge window, we need to be more carefuly about searching for changes. i.e. we need to check each line to see if it is at-or-near an interesting change. Signed-off-by: NeilBrown --- diff --git a/vpatch.c b/vpatch.c index be70ca1..48edb33 100644 --- a/vpatch.c +++ b/vpatch.c @@ -1683,12 +1683,18 @@ static void merge_window(struct plist *p, FILE *f, int reverse) do { pos = tpos; row++; next_mline(&tpos, fm, fb, fa, ci.merger, mmode); - } while (pos.state != 0 && ci.merger[tpos.p.m].type != End); + } while (!(pos.state == 0 + && (check_line(pos, fm, fb, fa, ci.merger, mmode) + & (CONFLICTED|WIGGLED)) == 0) + && ci.merger[tpos.p.m].type != End); tpos = pos; row--; do { pos = tpos; row++; next_mline(&tpos, fm, fb, fa, ci.merger, mmode); - } while (pos.state == 0 && ci.merger[tpos.p.m].type != End); + } while (pos.state == 0 + && (check_line(pos, fm, fb, fa, ci.merger, mmode) + & (CONFLICTED|WIGGLED)) == 0 + && ci.merger[tpos.p.m].type != End); break; case 'P': @@ -1697,12 +1703,18 @@ static void merge_window(struct plist *p, FILE *f, int reverse) do { pos = tpos; row--; prev_mline(&tpos, fm, fb, fa, ci.merger, mmode); - } while (tpos.state == 0 && tpos.p.m >= 0); + } while (tpos.state == 0 + && (check_line(tpos, fm, fb, fa, ci.merger, mmode) + & (CONFLICTED|WIGGLED)) == 0 + && tpos.p.m >= 0); tpos = pos; row++; do { pos = tpos; row--; prev_mline(&tpos, fm, fb, fa, ci.merger, mmode); - } while (tpos.state != 0 && tpos.p.m >= 0); + } while (!(tpos.state == 0 + && (check_line(tpos, fm, fb, fa, ci.merger, mmode) + & (CONFLICTED|WIGGLED)) == 0) + && tpos.p.m >= 0); break; case 'k':