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