Rev 3102: Deprecate get_parents() in favor of get_parent_map() in http://bzr.arbash-meinel.com/branches/bzr/1.1-dev/graph_optimization
John Arbash Meinel
john at arbash-meinel.com
Tue Dec 18 19:42:37 GMT 2007
At http://bzr.arbash-meinel.com/branches/bzr/1.1-dev/graph_optimization
------------------------------------------------------------
revno: 3102
revision-id:john at arbash-meinel.com-20071218194210-hrciq0bscpg2ge3p
parent: john at arbash-meinel.com-20071218190438-sq0itdz00lu5cm5h
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: graph_optimization
timestamp: Tue 2007-12-18 13:42:10 -0600
message:
Deprecate get_parents() in favor of get_parent_map()
modified:
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/index.py index.py-20070712131115-lolkarso50vjr64s-1
bzrlib/repofmt/knitrepo.py knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
-------------- next part --------------
=== modified file 'bzrlib/graph.py'
--- a/bzrlib/graph.py 2007-12-18 17:06:42 +0000
+++ b/bzrlib/graph.py 2007-12-18 19:42:10 +0000
@@ -17,6 +17,7 @@
from bzrlib import (
errors,
revision,
+ symbol_versioning,
tsort,
)
from bzrlib.deprecated_graph import (node_distances, select_farthest)
@@ -52,6 +53,7 @@
def __repr__(self):
return 'DictParentsProvider(%r)' % self.ancestry
+ @symbol_versioning.deprecated_method(symbol_versioning.one_one)
def get_parents(self, revisions):
return [self.ancestry.get(r, None) for r in revisions]
@@ -69,6 +71,7 @@
def __repr__(self):
return "_StackedParentsProvider(%r)" % self._parent_providers
+ @symbol_versioning.deprecated_method(symbol_versioning.one_one)
def get_parents(self, revision_ids):
"""Find revision ids of the parents of a list of revisions
@@ -122,6 +125,7 @@
def __repr__(self):
return "%s(%r)" % (self.__class__.__name__, self._real_provider)
+ @symbol_versioning.deprecated_method(symbol_versioning.one_one)
def get_parents(self, revision_ids):
"""See _StackedParentsProvider.get_parents"""
found = self.get_parent_map(revision_ids)
@@ -419,7 +423,7 @@
An ancestor may sort after a descendant if the relationship is not
visible in the supplied list of revisions.
"""
- sorter = tsort.TopoSorter(zip(revisions, self.get_parents(revisions)))
+ sorter = tsort.TopoSorter(self.get_parent_map(revisions))
return sorter.iter_topo_order()
def is_ancestor(self, candidate_ancestor, candidate_descendant):
@@ -517,10 +521,9 @@
self._search_revisions = self._start
else:
new_search_revisions = set()
- for parents in self._parents_provider.get_parents(
- self._search_revisions):
- if parents is None:
- continue
+ parent_map = self._parents_provider.get_parent_map(
+ self._search_revisions)
+ for parents in parent_map.itervalues():
new_search_revisions.update(p for p in parents if
p not in self.seen)
self._search_revisions = new_search_revisions
=== modified file 'bzrlib/index.py'
--- a/bzrlib/index.py 2007-12-18 17:06:42 +0000
+++ b/bzrlib/index.py 2007-12-18 19:42:10 +0000
@@ -35,7 +35,11 @@
from bzrlib.revision import NULL_REVISION
from bzrlib.trace import mutter
""")
-from bzrlib import debug, errors
+from bzrlib import (
+ debug,
+ errors,
+ symbol_versioning,
+ )
_HEADER_READV = (0, 200)
_OPTION_KEY_ELEMENTS = "key_elements="
@@ -995,6 +999,7 @@
self.__class__.__name__,
', '.join(map(repr, self._indices)))
+ @symbol_versioning.deprecated_method(symbol_versioning.one_one)
def get_parents(self, revision_ids):
"""See graph._StackedParentsProvider.get_parents.
=== modified file 'bzrlib/repofmt/knitrepo.py'
--- a/bzrlib/repofmt/knitrepo.py 2007-12-18 17:06:42 +0000
+++ b/bzrlib/repofmt/knitrepo.py 2007-12-18 19:42:10 +0000
@@ -30,6 +30,7 @@
lockable_files,
lockdir,
osutils,
+ symbol_versioning,
transactions,
xml5,
xml6,
@@ -58,6 +59,7 @@
def __repr__(self):
return 'KnitParentsProvider(%r)' % self._knit
+ @symbol_versioning.deprecated_method(symbol_versioning.one_one)
def get_parents(self, revision_ids):
"""See graph._StackedParentsProvider.get_parents"""
parent_map = self.get_parent_map(revision_ids)
=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py 2007-12-18 19:04:38 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2007-12-18 19:42:10 +0000
@@ -48,6 +48,7 @@
lockable_files,
lockdir,
osutils,
+ symbol_versioning,
transactions,
xml5,
xml6,
@@ -1894,6 +1895,7 @@
pb.finished()
return result
+ @symbol_versioning.deprecated_method(symbol_versioning.one_one)
def get_parents(self, revision_ids):
"""See graph._StackedParentsProvider.get_parents."""
parent_map = self.get_parent_map(revision_ids)
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py 2007-12-18 17:06:42 +0000
+++ b/bzrlib/repository.py 2007-12-18 19:42:10 +0000
@@ -1643,6 +1643,7 @@
def revision_parents(self, revision_id):
return self.get_inventory_weave().parent_names(revision_id)
+ @deprecated_method(symbol_versioning.one_one)
def get_parents(self, revision_ids):
"""See StackedParentsProvider.get_parents"""
parent_map = self.get_parent_map(revision_ids)
=== modified file 'bzrlib/tests/test_graph.py'
--- a/bzrlib/tests/test_graph.py 2007-12-18 17:06:42 +0000
+++ b/bzrlib/tests/test_graph.py 2007-12-18 19:42:10 +0000
@@ -17,6 +17,7 @@
from bzrlib import (
errors,
graph as _mod_graph,
+ symbol_versioning,
tests,
)
from bzrlib.revision import NULL_REVISION
@@ -449,19 +450,35 @@
self.assertEqual((set(['e']), set(['f', 'g'])),
graph.find_difference('e', 'f'))
- def test_stacked_parents_provider(self):
-
+ def test_stacked_parents_provider_get_parents(self):
parents1 = _mod_graph.DictParentsProvider({'rev2': ['rev3']})
parents2 = _mod_graph.DictParentsProvider({'rev1': ['rev4']})
stacked = _mod_graph._StackedParentsProvider([parents1, parents2])
self.assertEqual([['rev4',], ['rev3']],
- stacked.get_parents(['rev1', 'rev2']))
+ self.applyDeprecated(symbol_versioning.one_one,
+ stacked.get_parents, ['rev1', 'rev2']))
self.assertEqual([['rev3',], ['rev4']],
- stacked.get_parents(['rev2', 'rev1']))
+ self.applyDeprecated(symbol_versioning.one_one,
+ stacked.get_parents, ['rev2', 'rev1']))
self.assertEqual([['rev3',], ['rev3']],
- stacked.get_parents(['rev2', 'rev2']))
+ self.applyDeprecated(symbol_versioning.one_one,
+ stacked.get_parents, ['rev2', 'rev2']))
self.assertEqual([['rev4',], ['rev4']],
- stacked.get_parents(['rev1', 'rev1']))
+ self.applyDeprecated(symbol_versioning.one_one,
+ stacked.get_parents, ['rev1', 'rev1']))
+
+ def test_stacked_parents_provider(self):
+ parents1 = _mod_graph.DictParentsProvider({'rev2': ['rev3']})
+ parents2 = _mod_graph.DictParentsProvider({'rev1': ['rev4']})
+ stacked = _mod_graph._StackedParentsProvider([parents1, parents2])
+ self.assertEqual({'rev1':['rev4'], 'rev2':['rev3']},
+ stacked.get_parent_map(['rev1', 'rev2']))
+ self.assertEqual({'rev2':['rev3'], 'rev1':['rev4']},
+ stacked.get_parent_map(['rev2', 'rev1']))
+ self.assertEqual({'rev2':['rev3']},
+ stacked.get_parent_map(['rev2', 'rev2']))
+ self.assertEqual({'rev1':['rev4']},
+ stacked.get_parent_map(['rev1', 'rev1']))
def test_iter_topo_order(self):
graph = self.make_graph(ancestry_1)
@@ -676,34 +693,48 @@
def test_get_parents(self):
"""Requesting the same revision should be returned from cache"""
self.assertEqual({}, self.caching_pp._cache)
- self.assertEqual([('b',)], self.caching_pp.get_parents(['a']))
- self.assertEqual(['a'], self.inst_pp.calls)
- self.assertEqual([('b',)], self.caching_pp.get_parents(['a']))
- # No new call, as it should have been returned from the cache
- self.assertEqual(['a'], self.inst_pp.calls)
- self.assertEqual({'a':('b',)}, self.caching_pp._cache)
-
- def test_get_parents_not_present(self):
+ self.assertEqual([('b',)],
+ self.applyDeprecated(symbol_versioning.one_one,
+ self.caching_pp.get_parents, ['a']))
+ self.assertEqual(['a'], self.inst_pp.calls)
+ self.assertEqual([('b',)],
+ self.applyDeprecated(symbol_versioning.one_one,
+ self.caching_pp.get_parents, ['a']))
+ # No new call, as it should have been returned from the cache
+ self.assertEqual(['a'], self.inst_pp.calls)
+ self.assertEqual({'a':('b',)}, self.caching_pp._cache)
+
+ def test_get_parent_map(self):
+ """Requesting the same revision should be returned from cache"""
+ self.assertEqual({}, self.caching_pp._cache)
+ self.assertEqual({'a':('b',)}, self.caching_pp.get_parent_map(['a']))
+ self.assertEqual(['a'], self.inst_pp.calls)
+ self.assertEqual({'a':('b',)}, self.caching_pp.get_parent_map(['a']))
+ # No new call, as it should have been returned from the cache
+ self.assertEqual(['a'], self.inst_pp.calls)
+ self.assertEqual({'a':('b',)}, self.caching_pp._cache)
+
+ def test_get_parent_map_not_present(self):
"""The cache should also track when a revision doesn't exist"""
- self.assertEqual([None], self.caching_pp.get_parents(['b']))
+ self.assertEqual({}, self.caching_pp.get_parent_map(['b']))
self.assertEqual(['b'], self.inst_pp.calls)
- self.assertEqual([None], self.caching_pp.get_parents(['b']))
+ self.assertEqual({}, self.caching_pp.get_parent_map(['b']))
# No new calls
self.assertEqual(['b'], self.inst_pp.calls)
self.assertEqual({'b':None}, self.caching_pp._cache)
- def test_get_parents_mixed(self):
+ def test_get_parent_map_mixed(self):
"""Anything that can be returned from cache, should be"""
- self.assertEqual([None], self.caching_pp.get_parents(['b']))
+ self.assertEqual({}, self.caching_pp.get_parent_map(['b']))
self.assertEqual(['b'], self.inst_pp.calls)
- self.assertEqual([('b',), None],
- self.caching_pp.get_parents(['a', 'b']))
+ self.assertEqual({'a':('b',)},
+ self.caching_pp.get_parent_map(['a', 'b']))
self.assertEqual(['b', 'a'], self.inst_pp.calls)
- def test_get_parents_repeated(self):
+ def test_get_parent_map_repeated(self):
"""Asking for the same parent 2x will only forward 1 request."""
- self.assertEqual([None, ('b',), None],
- self.caching_pp.get_parents(['b', 'a', 'b']))
+ self.assertEqual({'a':('b',)},
+ self.caching_pp.get_parent_map(['b', 'a', 'b']))
# Use sorted because we don't care about the order, just that each is
# only present 1 time.
self.assertEqual(['a', 'b'], sorted(self.inst_pp.calls))
More information about the bazaar-commits
mailing list