Rev 88: Avoid use of get_revision_graph() calls. in file:///data/jelmer/bzr-rebase/trunk/

Jelmer Vernooij jelmer at samba.org
Thu May 29 15:07:19 BST 2008


At file:///data/jelmer/bzr-rebase/trunk/

------------------------------------------------------------
revno: 88
revision-id: jelmer at samba.org-20080529140718-ddrlmqyf0rfplub6
parent: jelmer at samba.org-20080529121454-e9ursqrtpdn6qevp
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Thu 2008-05-29 16:07:18 +0200
message:
  Avoid use of get_revision_graph() calls.
modified:
  NEWS                           news-20070721005510-kbjm9yxqoeczq9fl-1
  __init__.py                    __init__.py-20070626215909-fi0s39bkwxn4gcto-1
  rebase.py                      rebase.py-20070626221123-ellanmf93nw8z9r1-1
  test_rebase.py                 test_rebase.py-20070626221123-ellanmf93nw8z9r1-2
=== modified file 'NEWS'
--- a/NEWS	2008-05-18 13:57:53 +0000
+++ b/NEWS	2008-05-29 14:07:18 +0000
@@ -4,6 +4,10 @@
 
   * Changed license from GPLv2 or later to GPLv3 or later.
 
+ BUG FIXES
+
+  * Fix compatibility with Bazaar 1.6.
+
  ENHANCEMENTS
 
   * Set author property to preserve committer and original author of the 

=== modified file '__init__.py'
--- a/__init__.py	2008-05-29 12:14:41 +0000
+++ b/__init__.py	2008-05-29 14:07:18 +0000
@@ -27,7 +27,7 @@
                            UncommittedChanges)
 from bzrlib.trace import info, warning
 
-version_info = (0, 3, 0, 'final', 0)
+version_info = (0, 4, 0, 'dev', 0)
 if version_info[3] == 'final':
     version_string = '%d.%d.%d' % version_info[:3]
 else:

=== modified file 'rebase.py'
--- a/rebase.py	2008-05-29 12:14:41 +0000
+++ b/rebase.py	2008-05-29 14:07:18 +0000
@@ -174,30 +174,34 @@
     return replace_map
 
 
-def generate_transpose_plan(graph, renames, get_parents, generate_revid):
+def generate_transpose_plan(ancestry, renames, graph, generate_revid):
     """Create a rebase plan that replaces a bunch of revisions
     in a revision graph.
 
-    :param graph: Revision graph in which to operate
+    :param ancestry: Ancestry to consider
     :param renames: Renames of revision
-    :param get_parents: Function for determining parents
+    :param graph: Graph object
     :param generate_revid: Function for creating new revision ids
     """
     replace_map = {}
     todo = []
     children = {}
-    for r in graph:
+    parent_map = {}
+    for r, ps in ancestry:
+        parent_map[r] = ps
         if not children.has_key(r):
             children[r] = []
-        for p in graph[r]:
+        for p in ps:
             if not children.has_key(p):
                 children[p] = []
             children[p].append(r)
 
+    parent_map.update(graph.get_parent_map(filter(lambda x: not x in parent_map, renames.values())))
+
     # todo contains a list of revisions that need to 
     # be rewritten
-    for r in renames:
-        replace_map[r] = (renames[r], get_parents(renames[r]))
+    for r, v in renames.items():
+        replace_map[r] = (v, parent_map[v])
         todo.append(r)
 
     total = len(todo)
@@ -216,7 +220,7 @@
                 if replace_map.has_key(c):
                     parents = list(replace_map[c][1])
                 else:
-                    parents = list(graph[c])
+                    parents = list(parent_map[c])
                 assert isinstance(parents, list), \
                         "Expected list of parents, got: %r" % parents
                 # replace r in parents with replace_map[r][0]
@@ -285,10 +289,6 @@
                 # Was already converted, no need to worry about it again
                 continue
             replay_fn(repository, revid, newrevid, newparents)
-            assert repository.has_revision(newrevid)
-            assert repository.get_parent_map([newrevid])[newrevid] == newparents, \
-                   "expected parents %r, got %r" % (newparents, 
-                           repository.get_parent_map([newrevid])[newrevid])
             if dependencies.has_key(newrevid):
                 todo.extend(dependencies[newrevid])
                 del dependencies[newrevid]

=== modified file 'test_rebase.py'
--- a/test_rebase.py	2008-05-29 12:14:41 +0000
+++ b/test_rebase.py	2008-05-29 14:07:18 +0000
@@ -156,24 +156,26 @@
         wt.commit(message='add hello', rev_id="lala")
 
         b.repository.lock_read()
+        graph = b.repository.get_graph()
         self.assertEquals({
             'blie': ('newblie', ['lala'])},
-            generate_transpose_plan(b.repository.get_revision_graph("blie"), 
-            {"bla": "lala"}, b.repository.revision_parents, lambda y: "new"+y))
+            generate_transpose_plan(graph.iter_ancestry(["blie"]), 
+            {"bla": "lala"}, graph, lambda y: "new"+y))
         self.assertEquals({
             'bla2': ('newbla2', ['lala']),
             'bla3': ('newbla3', ['newbla2']),
             'blie': ('newblie', ['lala']),
             'bloe': ('newbloe', ['lala'])},
-            generate_transpose_plan(b.repository.get_revision_graph(), 
+            generate_transpose_plan(graph.iter_ancestry(b.repository._all_revision_ids()), 
             {"bla": "lala"}, 
-            b.repository.revision_parents, lambda y: "new"+y))
+            graph, lambda y: "new"+y))
         b.repository.unlock()
 
     def test_generate_transpose_plan_one(self):
+        graph = Graph(DictParentsProvider({"bla": ["bloe"], "bloe": [], "lala": []}))
         self.assertEquals({"bla": ("newbla", ["lala"])},
-                generate_transpose_plan({"bla": ["bloe"], "bloe": []},
-                    {"bloe": "lala"}, {}.get, lambda y: "new"+y))
+                generate_transpose_plan(graph.iter_ancestry(["bla", "bloe"]),
+                    {"bloe": "lala"}, graph, lambda y: "new"+y))
 
     def test_plan_with_already_merged(self):
         """We need to use a merge base that makes sense. 




More information about the bazaar-commits mailing list