Rev 6029: Delete the deprecated log._filter_revision_range and log.get_view_revisions and the associated tests, checking that covergae is not reduced with --coverage. in file:///home/vila/src/bzr/cleanup/deprecations/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Fri Jul 15 13:49:47 UTC 2011
At file:///home/vila/src/bzr/cleanup/deprecations/
------------------------------------------------------------
revno: 6029
revision-id: v.ladeuil+lp at free.fr-20110715134947-sce0z5tsz6d8kuxf
parent: v.ladeuil+lp at free.fr-20110715092425-3pv2oz6fw47ttfz3
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: deprecations
timestamp: Fri 2011-07-15 15:49:47 +0200
message:
Delete the deprecated log._filter_revision_range and log.get_view_revisions and the associated tests, checking that covergae is not reduced with --coverage.
-------------- next part --------------
=== modified file 'bzrlib/log.py'
--- a/bzrlib/log.py 2011-07-15 09:24:25 +0000
+++ b/bzrlib/log.py 2011-07-15 13:49:47 +0000
@@ -1162,50 +1162,6 @@
return mainline_revs, rev_nos, start_rev_id, end_rev_id
- at deprecated_function(deprecated_in((2, 2, 0)))
-def _filter_revision_range(view_revisions, start_rev_id, end_rev_id):
- """Filter view_revisions based on revision ranges.
-
- :param view_revisions: A list of (revision_id, dotted_revno, merge_depth)
- tuples to be filtered.
-
- :param start_rev_id: If not NONE specifies the first revision to be logged.
- If NONE then all revisions up to the end_rev_id are logged.
-
- :param end_rev_id: If not NONE specifies the last revision to be logged.
- If NONE then all revisions up to the end of the log are logged.
-
- :return: The filtered view_revisions.
- """
- if start_rev_id or end_rev_id:
- revision_ids = [r for r, n, d in view_revisions]
- if start_rev_id:
- start_index = revision_ids.index(start_rev_id)
- else:
- start_index = 0
- if start_rev_id == end_rev_id:
- end_index = start_index
- else:
- if end_rev_id:
- end_index = revision_ids.index(end_rev_id)
- else:
- end_index = len(view_revisions) - 1
- # To include the revisions merged into the last revision,
- # extend end_rev_id down to, but not including, the next rev
- # with the same or lesser merge_depth
- end_merge_depth = view_revisions[end_index][2]
- try:
- for index in xrange(end_index+1, len(view_revisions)+1):
- if view_revisions[index][2] <= end_merge_depth:
- end_index = index - 1
- break
- except IndexError:
- # if the search falls off the end then log to the end as well
- end_index = len(view_revisions) - 1
- view_revisions = view_revisions[start_index:end_index+1]
- return view_revisions
-
-
def _filter_revisions_touching_file_id(branch, file_id, view_revisions,
include_merges=True):
r"""Return the list of revision ids which touch a given file id.
@@ -1290,47 +1246,6 @@
return result
- at deprecated_function(deprecated_in((2, 2, 0)))
-def get_view_revisions(mainline_revs, rev_nos, branch, direction,
- include_merges=True):
- """Produce an iterator of revisions to show
- :return: an iterator of (revision_id, revno, merge_depth)
- (if there is no revno for a revision, None is supplied)
- """
- if not include_merges:
- revision_ids = mainline_revs[1:]
- if direction == 'reverse':
- revision_ids.reverse()
- for revision_id in revision_ids:
- yield revision_id, str(rev_nos[revision_id]), 0
- return
- graph = branch.repository.get_graph()
- # This asks for all mainline revisions, which means we only have to spider
- # sideways, rather than depth history. That said, its still size-of-history
- # and should be addressed.
- # mainline_revisions always includes an extra revision at the beginning, so
- # don't request it.
- parent_map = dict(((key, value) for key, value in
- graph.iter_ancestry(mainline_revs[1:]) if value is not None))
- # filter out ghosts; merge_sort errors on ghosts.
- rev_graph = _mod_repository._strip_NULL_ghosts(parent_map)
- merge_sorted_revisions = tsort.merge_sort(
- rev_graph,
- mainline_revs[-1],
- mainline_revs,
- generate_revno=True)
-
- if direction == 'forward':
- # forward means oldest first.
- merge_sorted_revisions = reverse_by_depth(merge_sorted_revisions)
- elif direction != 'reverse':
- raise ValueError('invalid direction %r' % direction)
-
- for (sequence, rev_id, merge_depth, revno, end_of_merge
- ) in merge_sorted_revisions:
- yield rev_id, '.'.join(map(str, revno)), merge_depth
-
-
def reverse_by_depth(merge_sorted_revisions, _depth=0):
"""Reverse revisions by depth.
=== modified file 'bzrlib/tests/test_log.py'
--- a/bzrlib/tests/test_log.py 2011-07-15 09:24:25 +0000
+++ b/bzrlib/tests/test_log.py 2011-07-15 13:49:47 +0000
@@ -983,317 +983,6 @@
wt.branch, log.GnuChangelogLogFormatter,
show_log_kwargs=dict(verbose=True))
-class TestGetViewRevisions(tests.TestCaseWithTransport, TestLogMixin):
-
- def _get_view_revisions(self, *args, **kwargs):
- return self.applyDeprecated(symbol_versioning.deprecated_in((2, 2, 0)),
- log.get_view_revisions, *args, **kwargs)
-
- def make_tree_with_commits(self):
- """Create a tree with well-known revision ids"""
- wt = self.make_branch_and_tree('tree1')
- self.wt_commit(wt, 'commit one', rev_id='1')
- self.wt_commit(wt, 'commit two', rev_id='2')
- self.wt_commit(wt, 'commit three', rev_id='3')
- mainline_revs = [None, '1', '2', '3']
- rev_nos = {'1': 1, '2': 2, '3': 3}
- return mainline_revs, rev_nos, wt
-
- def make_tree_with_merges(self):
- """Create a tree with well-known revision ids and a merge"""
- mainline_revs, rev_nos, wt = self.make_tree_with_commits()
- tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
- self.wt_commit(tree2, 'four-a', rev_id='4a')
- wt.merge_from_branch(tree2.branch)
- self.wt_commit(wt, 'four-b', rev_id='4b')
- mainline_revs.append('4b')
- rev_nos['4b'] = 4
- # 4a: 3.1.1
- return mainline_revs, rev_nos, wt
-
- def make_branch_with_many_merges(self):
- """Create a tree with well-known revision ids"""
- builder = self.make_branch_builder('tree1')
- builder.start_series()
- builder.build_snapshot('1', None, [
- ('add', ('', 'TREE_ROOT', 'directory', '')),
- ('add', ('f', 'f-id', 'file', '1\n'))])
- builder.build_snapshot('2', ['1'], [])
- builder.build_snapshot('3a', ['2'], [
- ('modify', ('f-id', '1\n2\n3a\n'))])
- builder.build_snapshot('3b', ['2', '3a'], [
- ('modify', ('f-id', '1\n2\n3a\n'))])
- builder.build_snapshot('3c', ['2', '3b'], [
- ('modify', ('f-id', '1\n2\n3a\n'))])
- builder.build_snapshot('4a', ['3b'], [])
- builder.build_snapshot('4b', ['3c', '4a'], [])
- builder.finish_series()
-
- # 1
- # |
- # 2-.
- # |\ \
- # | | 3a
- # | |/
- # | 3b
- # |/|
- # 3c4a
- # |/
- # 4b
-
- mainline_revs = [None, '1', '2', '3c', '4b']
- rev_nos = {'1':1, '2':2, '3c': 3, '4b':4}
- full_rev_nos_for_reference = {
- '1': '1',
- '2': '2',
- '3a': '2.1.1', #first commit tree 3
- '3b': '2.2.1', # first commit tree 2
- '3c': '3', #merges 3b to main
- '4a': '2.2.2', # second commit tree 2
- '4b': '4', # merges 4a to main
- }
- return mainline_revs, rev_nos, builder.get_branch()
-
- def test_get_view_revisions_forward(self):
- """Test the get_view_revisions method"""
- mainline_revs, rev_nos, wt = self.make_tree_with_commits()
- wt.lock_read()
- self.addCleanup(wt.unlock)
- revisions = list(self._get_view_revisions(
- mainline_revs, rev_nos, wt.branch, 'forward'))
- self.assertEqual([('1', '1', 0), ('2', '2', 0), ('3', '3', 0)],
- revisions)
- revisions2 = list(self._get_view_revisions(
- mainline_revs, rev_nos, wt.branch, 'forward',
- include_merges=False))
- self.assertEqual(revisions, revisions2)
-
- def test_get_view_revisions_reverse(self):
- """Test the get_view_revisions with reverse"""
- mainline_revs, rev_nos, wt = self.make_tree_with_commits()
- wt.lock_read()
- self.addCleanup(wt.unlock)
- revisions = list(self._get_view_revisions(
- mainline_revs, rev_nos, wt.branch, 'reverse'))
- self.assertEqual([('3', '3', 0), ('2', '2', 0), ('1', '1', 0), ],
- revisions)
- revisions2 = list(self._get_view_revisions(
- mainline_revs, rev_nos, wt.branch, 'reverse',
- include_merges=False))
- self.assertEqual(revisions, revisions2)
-
- def test_get_view_revisions_merge(self):
- """Test get_view_revisions when there are merges"""
- mainline_revs, rev_nos, wt = self.make_tree_with_merges()
- wt.lock_read()
- self.addCleanup(wt.unlock)
- revisions = list(self._get_view_revisions(
- mainline_revs, rev_nos, wt.branch, 'forward'))
- self.assertEqual([('1', '1', 0), ('2', '2', 0), ('3', '3', 0),
- ('4b', '4', 0), ('4a', '3.1.1', 1)],
- revisions)
- revisions = list(self._get_view_revisions(
- mainline_revs, rev_nos, wt.branch, 'forward',
- include_merges=False))
- self.assertEqual([('1', '1', 0), ('2', '2', 0), ('3', '3', 0),
- ('4b', '4', 0)],
- revisions)
-
- def test_get_view_revisions_merge_reverse(self):
- """Test get_view_revisions in reverse when there are merges"""
- mainline_revs, rev_nos, wt = self.make_tree_with_merges()
- wt.lock_read()
- self.addCleanup(wt.unlock)
- revisions = list(self._get_view_revisions(
- mainline_revs, rev_nos, wt.branch, 'reverse'))
- self.assertEqual([('4b', '4', 0), ('4a', '3.1.1', 1),
- ('3', '3', 0), ('2', '2', 0), ('1', '1', 0)],
- revisions)
- revisions = list(self._get_view_revisions(
- mainline_revs, rev_nos, wt.branch, 'reverse',
- include_merges=False))
- self.assertEqual([('4b', '4', 0), ('3', '3', 0), ('2', '2', 0),
- ('1', '1', 0)],
- revisions)
-
- def test_get_view_revisions_merge2(self):
- """Test get_view_revisions when there are merges"""
- mainline_revs, rev_nos, b = self.make_branch_with_many_merges()
- b.lock_read()
- self.addCleanup(b.unlock)
- revisions = list(self._get_view_revisions(
- mainline_revs, rev_nos, b, 'forward'))
- expected = [('1', '1', 0), ('2', '2', 0), ('3c', '3', 0),
- ('3b', '2.2.1', 1), ('3a', '2.1.1', 2), ('4b', '4', 0),
- ('4a', '2.2.2', 1)]
- self.assertEqual(expected, revisions)
- revisions = list(self._get_view_revisions(
- mainline_revs, rev_nos, b, 'forward',
- include_merges=False))
- self.assertEqual([('1', '1', 0), ('2', '2', 0), ('3c', '3', 0),
- ('4b', '4', 0)],
- revisions)
-
-
-class TestGetRevisionsTouchingFileID(tests.TestCaseWithTransport):
-
- def get_view_revisions(self, *args):
- return self.applyDeprecated(symbol_versioning.deprecated_in((2, 2, 0)),
- log.get_view_revisions, *args)
-
- def create_tree_with_single_merge(self):
- """Create a branch with a moderate layout.
-
- The revision graph looks like:
-
- A
- |\
- B C
- |/
- D
-
- In this graph, A introduced files f1 and f2 and f3.
- B modifies f1 and f3, and C modifies f2 and f3.
- D merges the changes from B and C and resolves the conflict for f3.
- """
- # TODO: jam 20070218 This seems like it could really be done
- # with make_branch_and_memory_tree() if we could just
- # create the content of those files.
- # TODO: jam 20070218 Another alternative is that we would really
- # like to only create this tree 1 time for all tests that
- # use it. Since 'log' only uses the tree in a readonly
- # fashion, it seems a shame to regenerate an identical
- # tree for each test.
- # TODO: vila 20100122 One way to address the shame above will be to
- # create a memory tree during test parametrization and give a
- # *copy* of this tree to each test. Copying a memory tree ought
- # to be cheap, at least cheaper than creating them with such
- # complex setups.
- tree = self.make_branch_and_tree('tree')
- tree.lock_write()
- self.addCleanup(tree.unlock)
-
- self.build_tree_contents([('tree/f1', 'A\n'),
- ('tree/f2', 'A\n'),
- ('tree/f3', 'A\n'),
- ])
- tree.add(['f1', 'f2', 'f3'], ['f1-id', 'f2-id', 'f3-id'])
- tree.commit('A', rev_id='A')
-
- self.build_tree_contents([('tree/f2', 'A\nC\n'),
- ('tree/f3', 'A\nC\n'),
- ])
- tree.commit('C', rev_id='C')
- # Revert back to A to build the other history.
- tree.set_last_revision('A')
- tree.branch.set_last_revision_info(1, 'A')
- self.build_tree_contents([('tree/f1', 'A\nB\n'),
- ('tree/f2', 'A\n'),
- ('tree/f3', 'A\nB\n'),
- ])
- tree.commit('B', rev_id='B')
- tree.set_parent_ids(['B', 'C'])
- self.build_tree_contents([('tree/f1', 'A\nB\n'),
- ('tree/f2', 'A\nC\n'),
- ('tree/f3', 'A\nB\nC\n'),
- ])
- tree.commit('D', rev_id='D')
-
- # Switch to a read lock for this tree.
- # We still have an addCleanup(tree.unlock) pending
- tree.unlock()
- tree.lock_read()
- return tree
-
- def check_delta(self, delta, **kw):
- """Check the filenames touched by a delta are as expected.
-
- Caller only have to pass in the list of files for each part, all
- unspecified parts are considered empty (and checked as such).
- """
- for n in 'added', 'removed', 'renamed', 'modified', 'unchanged':
- # By default we expect an empty list
- expected = kw.get(n, [])
- # strip out only the path components
- got = [x[0] for x in getattr(delta, n)]
- self.assertEqual(expected, got)
-
- def test_tree_with_single_merge(self):
- """Make sure the tree layout is correct."""
- tree = self.create_tree_with_single_merge()
- rev_A_tree = tree.branch.repository.revision_tree('A')
- rev_B_tree = tree.branch.repository.revision_tree('B')
- rev_C_tree = tree.branch.repository.revision_tree('C')
- rev_D_tree = tree.branch.repository.revision_tree('D')
-
- self.check_delta(rev_B_tree.changes_from(rev_A_tree),
- modified=['f1', 'f3'])
-
- self.check_delta(rev_C_tree.changes_from(rev_A_tree),
- modified=['f2', 'f3'])
-
- self.check_delta(rev_D_tree.changes_from(rev_B_tree),
- modified=['f2', 'f3'])
-
- self.check_delta(rev_D_tree.changes_from(rev_C_tree),
- modified=['f1', 'f3'])
-
- def assertAllRevisionsForFileID(self, tree, file_id, revisions):
- """Ensure _filter_revisions_touching_file_id returns the right values.
-
- Get the return value from _filter_revisions_touching_file_id and make
- sure they are correct.
- """
- # The api for _filter_revisions_touching_file_id is a little crazy.
- # So we do the setup here.
- mainline = tree.branch.revision_history()
- mainline.insert(0, None)
- revnos = dict((rev, idx+1) for idx, rev in enumerate(mainline))
- view_revs_iter = self.get_view_revisions(
- mainline, revnos, tree.branch, 'reverse', True)
- actual_revs = log._filter_revisions_touching_file_id(
- tree.branch, file_id, list(view_revs_iter))
- self.assertEqual(revisions, [r for r, revno, depth in actual_revs])
-
- def test_file_id_f1(self):
- tree = self.create_tree_with_single_merge()
- # f1 should be marked as modified by revisions A and B
- self.assertAllRevisionsForFileID(tree, 'f1-id', ['B', 'A'])
-
- def test_file_id_f2(self):
- tree = self.create_tree_with_single_merge()
- # f2 should be marked as modified by revisions A, C, and D
- # because D merged the changes from C.
- self.assertAllRevisionsForFileID(tree, 'f2-id', ['D', 'C', 'A'])
-
- def test_file_id_f3(self):
- tree = self.create_tree_with_single_merge()
- # f3 should be marked as modified by revisions A, B, C, and D
- self.assertAllRevisionsForFileID(tree, 'f3-id', ['D', 'C', 'B', 'A'])
-
- def test_file_id_with_ghosts(self):
- # This is testing bug #209948, where having a ghost would cause
- # _filter_revisions_touching_file_id() to fail.
- tree = self.create_tree_with_single_merge()
- # We need to add a revision, so switch back to a write-locked tree
- # (still a single addCleanup(tree.unlock) pending).
- tree.unlock()
- tree.lock_write()
- first_parent = tree.last_revision()
- tree.set_parent_ids([first_parent, 'ghost-revision-id'])
- self.build_tree_contents([('tree/f1', 'A\nB\nXX\n')])
- tree.commit('commit with a ghost', rev_id='XX')
- self.assertAllRevisionsForFileID(tree, 'f1-id', ['XX', 'B', 'A'])
- self.assertAllRevisionsForFileID(tree, 'f2-id', ['D', 'C', 'A'])
-
- def test_unknown_file_id(self):
- tree = self.create_tree_with_single_merge()
- self.assertAllRevisionsForFileID(tree, 'unknown', [])
-
- def test_empty_branch_unknown_file_id(self):
- tree = self.make_branch_and_tree('tree')
- self.assertAllRevisionsForFileID(tree, 'unknown', [])
-
class TestShowChangedRevisions(tests.TestCaseWithTransport):
More information about the bazaar-commits
mailing list