Rev 3: Handle merges. in file:///v/home/vila/.bazaar/plugins/lpto/

Vincent Ladeuil v.ladeuil+lp at free.fr
Sat Sep 13 08:45:48 BST 2008


At file:///v/home/vila/.bazaar/plugins/lpto/

------------------------------------------------------------
revno: 3
revision-id: v.ladeuil+lp at free.fr-20080913074548-rifgaaycas49r7qn
parent: v.ladeuil+lp at free.fr-20080912174029-2cfhczgx8a6gr2uf
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: lpto
timestamp: Sat 2008-09-13 09:45:48 +0200
message:
  Handle merges.
  
  * tests/test_lpto.py:
  (TestCalculateLptos.test_simple_merge): Added.
  
  * __init__.py:
  (calculate_lptos): A simple reverse will do. Accept 'null:' as a
  revid (rich-root ?). Add depth in the values returned for analysis
  purpose.
modified:
  __init__.py                    __init__.py-20080912160131-v30mt2ve4pzprxqp-1
  tests/test_lpto.py             test_lpto.py-20080912160131-v30mt2ve4pzprxqp-4
-------------- next part --------------
=== modified file '__init__.py'
--- a/__init__.py	2008-09-12 17:40:29 +0000
+++ b/__init__.py	2008-09-13 07:45:48 +0000
@@ -38,7 +38,7 @@
 
     def _run(self, br):
         for lpto, revno, revid in calculate_lptos(br):
-            print '%r:%r:%r' % (lpto, revno, revid)
+            print '%r:%r:%r:%r:%r' % (lpto, revno, depth, revid)
 
 
 def calculate_lptos(br):
@@ -54,9 +54,9 @@
     merge_sorted_revisions = tsort.merge_sort(rev_graph, last_rev, None,
                                          generate_revno=True)
 
-    merge_sorted_revisions = log.reverse_by_depth(merge_sorted_revisions)
+    merge_sorted_revisions.reverse()
     revs = []
-    lptos = dict()
+    lptos = {'null:':0}
     previous = None
     for seq, revid, depth, revno, end_of_merge in merge_sorted_revisions:
         if previous is None:
@@ -69,11 +69,16 @@
             else:
                 lpto = 0
                 for p in parents:
-                    parent_lpto = lptos[p]
-                    if  parent_lpto > lpto:
-                        lpto = parent_lpto + 1
+                    try:
+                        parent_lpto = lptos[p]
+                        if  parent_lpto > lpto:
+                            lpto = parent_lpto + 1
+                    except KeyError:
+                        # merge_sort (reversed) guarantees that we see the
+                        # parents before the children, this should be ghost.
+                        pass
         lptos[revid] = lpto
-        revs.append((lpto, revno, revid))
+        revs.append((lpto, revno, depth, revid))
         previous = revid
 
     return revs

=== modified file 'tests/test_lpto.py'
--- a/tests/test_lpto.py	2008-09-12 17:40:29 +0000
+++ b/tests/test_lpto.py	2008-09-13 07:45:48 +0000
@@ -41,7 +41,25 @@
         builder.build_snapshot('C-id', ['B-id'], [])
         # FIXME: Since we use not tree, the following fails, that's a bug.
         # builder.finish_series()
-        self.assertEqual([(1, (1,), 'A-id'),
-                          (2, (2,), 'B-id'),
-                          (3, (3,), 'C-id')],
+        self.assertEqual([(1, (1,), 0, 'A-id'),
+                          (2, (2,), 0, 'B-id'),
+                          (3, (3,), 0, 'C-id')],
+                         self._get_lptos(builder.get_branch()))
+
+    def test_simple_merge(self):
+        builder = self.make_branch_builder('path')
+        builder.build_snapshot('A-id', None,
+                               [('add', ('', 'a-root-id', 'directory', None))])
+        builder.build_snapshot('B-id', ['A-id'], [])
+        builder.build_snapshot('C-id', ['B-id'], [])
+        builder.build_snapshot('D-id', ['A-id'], [])
+        builder.build_snapshot('E-id', ['C-id', 'D-id'], [])
+        # FIXME: Since we use no tree, the following fails, that's a bug.
+        # builder.finish_series()
+        self.assertEqual([(1, (1,), 0, 'A-id'),
+                          (2, (2,), 0, 'B-id'),
+                          (3, (3,), 0, 'C-id'),
+                          (2, (1, 1, 1), 1, 'D-id'),
+                          (4, (4,), 0, 'E-id'),
+                         ],
                          self._get_lptos(builder.get_branch()))



More information about the bazaar-commits mailing list