]> git.neil.brown.name Git - wiggle.git/commitdiff
vpatch: ensure searching for 'next change' works.
authorNeilBrown <neilb@suse.de>
Mon, 12 Nov 2012 23:57:45 +0000 (10:57 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 12 Nov 2012 23:57:45 +0000 (10:57 +1100)
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 <neilb@suse.de>
vpatch.c

index be70ca18be6cac827a159d0cac5102ac462b9121..48edb336e53a55b2f7edd40780e6d15a8782a371 100644 (file)
--- 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':