[Pkg-bazaar-commits] ./bzr/unstable r827: - new Merge3.merge_groups feeds back the merged lines

Martin Pool mbp at sourcefrog.net
Fri Apr 10 08:21:10 UTC 2009


------------------------------------------------------------
revno: 827
committer: Martin Pool <mbp at sourcefrog.net>
timestamp: Tue 2005-07-05 18:30:08 +1000
message:
  - new Merge3.merge_groups feeds back the merged lines
modified:
  bzrlib/merge3.py
  bzrlib/selftest/testmerge3.py
-------------- next part --------------
=== modified file 'bzrlib/merge3.py'
--- a/bzrlib/merge3.py	2005-07-05 08:20:41 +0000
+++ b/bzrlib/merge3.py	2005-07-05 08:30:08 +0000
@@ -68,6 +68,39 @@
         self.b_ops = SequenceMatcher(None, base, b).get_opcodes()
 
 
+
+    def merge_groups(self):
+        """Yield sequence of line groups.  Each one is a tuple:
+
+        'unchanged', lines
+             Lines unchanged from base
+
+        'a', lines
+             Lines taken from a
+
+        'b', lines
+             Lines taken from b
+
+        'conflict', base_lines, a_lines, b_lines
+             Lines from base were changed to either a or b and conflict.
+        """
+        for t in self.merge_regions():
+            what = t[0]
+            if what == 'unchanged':
+                yield what, self.base[t[1]:t[2]]
+            elif what == 'a':
+                yield what, self.a[t[1]:t[2]]
+            elif what == 'b':
+                yield what, self.b[t[1]:t[2]]
+            elif what == 'conflict':
+                yield (what,
+                       self.base[t[1]:t[2]],
+                       self.a[t[3]:t[4]],
+                       self.b[t[5]:t[6]])
+            else:
+                raise ValueError(what)
+
+
     def merge_regions(self):
         """Return sequences of matching and conflicting regions.
 
@@ -122,7 +155,7 @@
                 elif equal_b and not equal_a:
                     yield 'a', ia, amatch
                 elif not equal_a and not equal_b:
-                    yield 'conflict', ia, amatch, ib, bmatch
+                    yield 'conflict', iz, zmatch, ia, amatch, ib, bmatch
                 else:
                     assert 0
 

=== modified file 'bzrlib/selftest/testmerge3.py'
--- a/bzrlib/selftest/testmerge3.py	2005-07-05 08:20:41 +0000
+++ b/bzrlib/selftest/testmerge3.py	2005-07-05 08:30:08 +0000
@@ -37,6 +37,9 @@
         self.assertEquals(list(m3.merge_regions()),
                           [('unchanged', 0, 2)])
 
+        self.assertEquals(list(m3.merge_groups()),
+                          [('unchanged', ['aaa', 'bbb'])])
+
 
 class FrontInsert(TestBase):
     def runTest(self):
@@ -53,6 +56,10 @@
         self.assertEquals(list(m3.merge_regions()),
                           [('a', 0, 2),
                            ('unchanged', 0, 1)])
+
+        self.assertEquals(list(m3.merge_groups()),
+                          [('a', ['aaa', 'bbb']),
+                           ('unchanged', ['zz'])])
         
     
 
@@ -112,9 +119,15 @@
 
         self.assertEquals(list(m3.merge_regions()),
                           [('unchanged', 0,1),
-                           ('conflict', 1,2, 1,2),
+                           ('conflict', 1,1, 1,2, 1,2),
                            ('unchanged', 1,2)])
 
+        self.assertEquals(list(m3.merge_groups()),
+                          [('unchanged', ['aaa']),
+                           ('conflict', [], ['111'], ['222']),
+                           ('unchanged', ['bbb']),
+                           ])
+
 
 
 class ReplaceClash(TestBase):



More information about the Pkg-bazaar-commits mailing list