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