Rev 21: Fix Repository.get_revision_graph() in http://bzr.arbash-meinel.com/plugins/git
John Arbash Meinel
john at arbash-meinel.com
Fri Nov 9 04:53:18 GMT 2007
At http://bzr.arbash-meinel.com/plugins/git
------------------------------------------------------------
revno: 21
revision-id:john at arbash-meinel.com-20071109045315-76bp6gmezv29hule
parent: john at arbash-meinel.com-20071109044042-l0d388d8w9by06lg
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: git
timestamp: Thu 2007-11-08 23:53:15 -0500
message:
Fix Repository.get_revision_graph()
modified:
gitlib/git_branch.py git_branch.py-20071108230535-su8dxk529f4uk9fx-2
gitlib/git_repository.py git_repository.py-20071108234408-ygidvy5hviixghsd-2
tests/test_git_repository.py test_git_repository.-20071108234408-ygidvy5hviixghsd-5
-------------- next part --------------
=== modified file 'gitlib/git_branch.py'
--- a/gitlib/git_branch.py 2007-11-09 04:40:42 +0000
+++ b/gitlib/git_branch.py 2007-11-09 04:53:15 +0000
@@ -102,5 +102,3 @@
"""See Branch.set_push_location."""
self.get_config().set_user_option('push_location', location,
local=True)
-
-
=== modified file 'gitlib/git_repository.py'
--- a/gitlib/git_repository.py 2007-11-09 04:40:42 +0000
+++ b/gitlib/git_repository.py 2007-11-09 04:53:15 +0000
@@ -50,21 +50,31 @@
return True
def get_revision_graph(self, revision_id=None):
- if revision_id is None:
- revisions = None
- else:
- revisions = [revision_id]
- return self.get_revision_graph_with_ghosts(revisions).get_ancestors()
-
- def get_revision_graph_with_ghosts(self, revision_ids=None):
result = {}
- for node, parents in self._git.ancestry(None).iteritems():
+ if revision_id is not None:
+ param = [ids.convert_revision_id_bzr_to_git(revision_id)]
+ else:
+ param = None
+ for node, parents in self._git.ancestry(param).iteritems():
bzr_node = ids.convert_revision_id_git_to_bzr(node)
bzr_parents = [ids.convert_revision_id_git_to_bzr(n)
for n in parents]
result[bzr_node] = bzr_parents
return result
+ def get_revision_graph_with_ghosts(self, revision_ids=None):
+ graph = deprecated_graph.Graph()
+ if revision_ids is not None:
+ revision_ids = [ids.convert_revision_id_bzr_to_git(r)
+ for r in revision_ids]
+ for node, parents in self._git.ancestry(revision_ids).iteritems():
+ bzr_node = ids.convert_revision_id_git_to_bzr(node)
+ bzr_parents = [ids.convert_revision_id_git_to_bzr(n)
+ for n in parents]
+
+ graph.add_node(bzr_node, bzr_parents)
+ return graph
+
def get_revision(self, revision_id):
if revision_id in self._revision_cache:
return self._revision_cache[revision_id]
=== modified file 'tests/test_git_repository.py'
--- a/tests/test_git_repository.py 2007-11-09 04:17:01 +0000
+++ b/tests/test_git_repository.py 2007-11-09 04:53:15 +0000
@@ -23,6 +23,7 @@
from bzrlib.plugins.git import tests
from bzrlib.plugins.git.gitlib import (
git_repository,
+ ids,
model,
)
@@ -42,3 +43,31 @@
repo = repository.Repository.open('.')
self.assertIsInstance(repo._git, model.GitModel)
+
+ def test_revision_graph(self):
+ tests.run_git('init')
+ self.build_tree(['a'])
+ tests.run_git('add', 'a')
+ tests.run_git('commit', '-m', 'a')
+ tests.run_git('branch', 'foo')
+ self.build_tree_contents([('a', 'new a\n')])
+ tests.run_git('commit', '-a', '-m', 'new a')
+ tests.run_git('checkout', 'foo')
+ self.build_tree(['b'])
+ tests.run_git('add', 'b')
+ tests.run_git('commit', '-m', 'b')
+ tests.run_git('merge', 'master')
+
+ revisions = tests.run_git('rev-list', '--topo-order', 'HEAD')
+ revisions = [ids.convert_revision_id_git_to_bzr(r)
+ for r in revisions.splitlines()]
+ graph = {revisions[0]:[revisions[2], revisions[1]],
+ revisions[1]:[revisions[3]],
+ revisions[2]:[revisions[3]],
+ revisions[3]:[],
+ }
+
+ repo = repository.Repository.open('.')
+ self.assertEqual(graph, repo.get_revision_graph(revisions[0]))
+ self.assertEqual({revisions[3]:[]},
+ repo.get_revision_graph(revisions[3]))
More information about the bazaar-commits
mailing list