Rev 3606: Review feedback. in http://people.ubuntu.com/~robertc/baz2.0/3439

Robert Collins robertc at robertcollins.net
Tue Sep 2 02:26:58 BST 2008


At http://people.ubuntu.com/~robertc/baz2.0/3439

------------------------------------------------------------
revno: 3606
revision-id: robertc at robertcollins.net-20080902012652-4ha6zs6m1r21onx7
parent: robertc at robertcollins.net-20080902000134-qz8r6v1mltygeg6t
committer: Robert Collins <robertc at robertcollins.net>
branch nick: 3439
timestamp: Tue 2008-09-02 11:26:52 +1000
message:
  Review feedback.
modified:
  bzrlib/annotate.py             annotate.py-20050922133147-7c60541d2614f022
  bzrlib/tests/blackbox/test_annotate.py testannotate.py-20051013044000-457f44801bfa9d39
=== modified file 'bzrlib/annotate.py'
--- a/bzrlib/annotate.py	2008-09-02 00:01:34 +0000
+++ b/bzrlib/annotate.py	2008-09-02 01:26:52 +0000
@@ -35,6 +35,7 @@
     tsort,
     )
 from bzrlib.config import extract_email_address
+from bzrlib.repository import _strip_NULL_ghosts
 from bzrlib.revision import CURRENT_REVISION, Revision
 
 
@@ -89,14 +90,15 @@
     if show_ids:
         return _show_id_annotations(annotations, to_file, full)
 
-    # Calculate the lengths of the various columns
+    # Create a virtual revision to represent the current tree state.
+    # Should get some more pending commit attributes, like pending tags,
+    # bugfixes etc.
     current_rev = Revision(CURRENT_REVISION)
     current_rev.parent_ids = tree.get_parent_ids()
     current_rev.committer = tree.branch.get_config().username()
     current_rev.message = "?"
     current_rev.timestamp = round(time.time(), 3)
     current_rev.timezone = osutils.local_time_offset()
-    # Should get pending tags/fixes etc - pending commit attributes.
     annotation = list(_expand_annotations(annotations, tree.branch,
         current_rev))
     _print_annotations(annotation, verbose, to_file, full)
@@ -179,7 +181,26 @@
     :param branch: A locked branch to query for revision details.
     """
     repository = branch.repository
-    revision_id_to_revno = branch.get_revision_id_to_revno_map()
+    if current_rev is not None:
+        # This can probably become a function on MutableTree, get_revno_map there,
+        # or something.
+        last_revision = current_rev.revision_id
+        # XXX: Partially Cloned from branch, uses the old_get_graph, eep.
+        graph = repository.get_graph()
+        revision_graph = dict(((key, value) for key, value in
+            graph.iter_ancestry(current_rev.parent_ids) if value is not None))
+        revision_graph = _strip_NULL_ghosts(revision_graph)
+        revision_graph[last_revision] = current_rev.parent_ids
+        merge_sorted_revisions = tsort.merge_sort(
+            revision_graph,
+            last_revision,
+            None,
+            generate_revno=True)
+        revision_id_to_revno = dict((rev_id, revno)
+            for seq_num, rev_id, depth, revno, end_of_merge in
+                merge_sorted_revisions)
+    else:
+        revision_id_to_revno = branch.get_revision_id_to_revno_map()
     last_origin = None
     revision_ids = set(o for o, t in annotations)
     revisions = {}

=== modified file 'bzrlib/tests/blackbox/test_annotate.py'
--- a/bzrlib/tests/blackbox/test_annotate.py	2008-08-05 05:41:10 +0000
+++ b/bzrlib/tests/blackbox/test_annotate.py	2008-09-02 01:26:52 +0000
@@ -156,7 +156,7 @@
         tree = self.make_branch_and_tree('.')
         self.build_tree_contents([('file', 'foo\ngam\n')])
         tree.add('file')
-        tree.commit('add file', committer="test at host", rev_id="1")
+        tree.commit('add file', committer="test at host", rev_id="rev1")
         self.build_tree_contents([('file', 'foo\nbar\ngam\n')])
         tree.branch.get_config().set_user_option('email', 'current at host2')
 
@@ -173,9 +173,49 @@
         tree = self._setup_edited_file()
         out, err = self.run_bzr('annotate file --show-ids')
         self.assertEqual(
-            '       1 | foo\n'
+            '    rev1 | foo\n'
             'current: | bar\n'
-            '       1 | gam\n',
+            '    rev1 | gam\n',
+            out)
+
+    def _create_merged_file(self):
+        """Create a file with a pending merge and local edit."""
+        tree = self.make_branch_and_tree('.')
+        self.build_tree_contents([('file', 'foo\ngam\n')])
+        tree.add('file')
+        tree.commit('add file', rev_id="rev1", committer="test at host")
+        # right side
+        self.build_tree_contents([('file', 'foo\nbar\ngam\n')])
+        tree.commit("right", rev_id="rev1.1.1", committer="test at host")
+        tree.pull(tree.branch, True, "rev1")
+        # left side
+        self.build_tree_contents([('file', 'foo\nbaz\ngam\n')])
+        tree.commit("left", rev_id="rev2", committer="test at host")
+        # merge
+        tree.merge_from_branch(tree.branch, "rev1.1.1")
+        # edit the file to be 'resolved' and have a further local edit
+        self.build_tree_contents([('file', 'local\nfoo\nbar\nbaz\ngam\n')])
+
+    def test_annotated_edited_merged_file_revnos(self):
+        self._create_merged_file()
+        out, err = self.run_bzr('annotate file')
+        self.assertEqual(
+            '3?    robertc | local\n'
+            '1     test at ho | foo\n'
+            '1.1.1 test at ho | bar\n'
+            '2     test at ho | baz\n'
+            '1     test at ho | gam\n',
+            out)
+
+    def test_annotated_edited_merged_file_ids(self):
+        self._create_merged_file()
+        out, err = self.run_bzr('annotate file --show-ids')
+        self.assertEqual(
+            'current: | local\n'
+            '    rev1 | foo\n'
+            'rev1.1.1 | bar\n'
+            '    rev2 | baz\n'
+            '    rev1 | gam\n',
             out)
 
     def test_annotate_empty_file(self):




More information about the bazaar-commits mailing list