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