Rev 3173: (robertc) Provide a fuller deprecation of Graph.get_parents for in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Fri Jan 11 02:51:57 GMT 2008
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 3173
revision-id:pqm at pqm.ubuntu.com-20080111025153-mqrn9i5o3hqezw75
parent: pqm at pqm.ubuntu.com-20080110025628-6tl4b9cmdn335suw
parent: robertc at robertcollins.net-20080111004417-yqxhy4jdu526uslq
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2008-01-11 02:51:53 +0000
message:
(robertc) Provide a fuller deprecation of Graph.get_parents for
ParentProvider implementors. (Robert Collins)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
------------------------------------------------------------
revno: 3172.1.2
revision-id:robertc at robertcollins.net-20080111004417-yqxhy4jdu526uslq
parent: robertc at robertcollins.net-20080110220839-ze9uhnjp04h7y9mp
committer: Robert Collins <robertc at robertcollins.net>
branch nick: get_parents.deprecation
timestamp: Fri 2008-01-11 11:44:17 +1100
message:
Parent Providers should now implement ``get_parent_map`` returning a
dictionary instead of ``get_parents`` returning a list.
``get_parents`` is now considered deprecated. (John Arbash Meinel)
``Graph.get_parents`` is now deprecated. (John Arbash Meinel,
Robert Collins)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/tests/test_graph.py test_graph_walker.py-20070525030405-enq4r60hhi9xrujc-1
------------------------------------------------------------
revno: 3172.1.1
revision-id:robertc at robertcollins.net-20080110220839-ze9uhnjp04h7y9mp
parent: pqm at pqm.ubuntu.com-20080110025628-6tl4b9cmdn335suw
committer: Robert Collins <robertc at robertcollins.net>
branch nick: remote.graph
timestamp: Fri 2008-01-11 09:08:39 +1100
message:
``Graph`` no longer requires the ``parents_provider`` to have a
``get_parents`` attribute. (Robert Collins)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
=== modified file 'NEWS'
--- a/NEWS 2008-01-10 01:45:17 +0000
+++ b/NEWS 2008-01-11 00:44:17 +0000
@@ -158,7 +158,8 @@
* Parent Providers should now implement ``get_parent_map`` returning a
dictionary instead of ``get_parents`` returning a list.
- ``get_parents`` is now considered deprecated. (John Arbash Meinel)
+ ``Graph.get_parents`` is now deprecated. (John Arbash Meinel,
+ Robert Collins)
* Patience Diff now supports arbitrary python objects, as long as they
support ``hash()``. (John Arbash Meinel)
=== modified file 'bzrlib/graph.py'
--- a/bzrlib/graph.py 2007-12-18 19:42:10 +0000
+++ b/bzrlib/graph.py 2008-01-11 00:44:17 +0000
@@ -46,6 +46,7 @@
class DictParentsProvider(object):
+ """A parents provider for Graph objects."""
def __init__(self, ancestry):
self.ancestry = ancestry
@@ -53,10 +54,6 @@
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]
-
def get_parent_map(self, keys):
"""See _StackedParentsProvider.get_parent_map"""
ancestry = self.ancestry
@@ -71,22 +68,6 @@
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
-
- A list is returned of the same length as the input. Each entry
- is a list of parent ids for the corresponding input revision.
-
- [NULL_REVISION] is used as the parent of the first user-committed
- revision. Its parent list is empty.
-
- If the revision is not present (i.e. a ghost), None is used in place
- of the list of parents.
- """
- found = self.get_parent_map(revision_ids)
- return [found.get(r, None) for r in revision_ids]
-
def get_parent_map(self, keys):
"""Get a mapping of keys => parents
@@ -125,12 +106,6 @@
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)
- return [found.get(r, None) for r in revision_ids]
-
def get_parent_map(self, keys):
"""See _StackedParentsProvider.get_parent_map"""
needed = set()
@@ -168,13 +143,16 @@
This should not normally be invoked directly, because there may be
specialized implementations for particular repository types. See
- Repository.get_graph()
+ Repository.get_graph().
- :param parents_provider: An object providing a get_parents call
- conforming to the behavior of StackedParentsProvider.get_parents
+ :param parents_provider: An object providing a get_parent_map call
+ conforming to the behavior of
+ StackedParentsProvider.get_parent_map.
"""
- self.get_parents = parents_provider.get_parents
- self.get_parent_map = parents_provider.get_parent_map
+ if getattr(parents_provider, 'get_parents', None) is not None:
+ self.get_parents = parents_provider.get_parents
+ if getattr(parents_provider, 'get_parent_map', None) is not None:
+ self.get_parent_map = parents_provider.get_parent_map
self._parents_provider = parents_provider
def __repr__(self):
@@ -226,6 +204,36 @@
return (left.difference(right).difference(common),
right.difference(left).difference(common))
+ @symbol_versioning.deprecated_method(symbol_versioning.one_one)
+ def get_parents(self, revisions):
+ """Find revision ids of the parents of a list of revisions
+
+ A list is returned of the same length as the input. Each entry
+ is a list of parent ids for the corresponding input revision.
+
+ [NULL_REVISION] is used as the parent of the first user-committed
+ revision. Its parent list is empty.
+
+ If the revision is not present (i.e. a ghost), None is used in place
+ of the list of parents.
+
+ Deprecated in bzr 1.2 - please see get_parent_map.
+ """
+ parents = self.get_parent_map(revisions)
+ return [parent.get(r, None) for r in revisions]
+
+ def get_parent_map(self, revisions):
+ """Get a map of key:parent_list for revisions.
+
+ This implementation delegates to get_parents, for old parent_providers
+ that do not supply get_parent_map.
+ """
+ result = {}
+ for rev, parents in self.get_parents(revisions):
+ if parents is not None:
+ result[rev] = parents
+ return result
+
def _make_breadth_first_searcher(self, revisions):
return _BreadthFirstSearcher(revisions, self)
=== modified file 'bzrlib/tests/test_graph.py'
--- a/bzrlib/tests/test_graph.py 2007-12-18 19:42:10 +0000
+++ b/bzrlib/tests/test_graph.py 2008-01-11 00:44:17 +0000
@@ -244,10 +244,6 @@
self.calls = []
self._real_parents_provider = parents_provider
- def get_parents(self, nodes):
- self.calls.extend(nodes)
- return self._real_parents_provider.get_parents(nodes)
-
def get_parent_map(self, nodes):
self.calls.extend(nodes)
return self._real_parents_provider.get_parent_map(nodes)
@@ -450,23 +446,6 @@
self.assertEqual((set(['e']), set(['f', 'g'])),
graph.find_difference('e', 'f'))
- 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']],
- self.applyDeprecated(symbol_versioning.one_one,
- stacked.get_parents, ['rev1', 'rev2']))
- self.assertEqual([['rev3',], ['rev4']],
- self.applyDeprecated(symbol_versioning.one_one,
- stacked.get_parents, ['rev2', 'rev1']))
- self.assertEqual([['rev3',], ['rev3']],
- self.applyDeprecated(symbol_versioning.one_one,
- stacked.get_parents, ['rev2', 'rev2']))
- self.assertEqual([['rev4',], ['rev4']],
- 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']})
@@ -626,13 +605,6 @@
"""
class stub(object):
pass
- def get_parents(keys):
- result = []
- for key in keys:
- if key == 'deeper':
- self.fail('key deeper was accessed')
- result.append(graph_dict[key])
- return result
def get_parent_map(keys):
result = {}
for key in keys:
@@ -641,7 +613,6 @@
result[key] = graph_dict[key]
return result
an_obj = stub()
- an_obj.get_parents = get_parents
an_obj.get_parent_map = get_parent_map
graph = _mod_graph.Graph(an_obj)
return graph.heads(search)
@@ -690,20 +661,6 @@
self.inst_pp = InstrumentedParentsProvider(dict_pp)
self.caching_pp = _mod_graph.CachingParentsProvider(self.inst_pp)
- def test_get_parents(self):
- """Requesting the same revision should be returned from cache"""
- self.assertEqual({}, self.caching_pp._cache)
- 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)
More information about the bazaar-commits
mailing list