Rev 3175: Merge get_parents full deprecation. in http://people.ubuntu.com/~robertc/baz2.0/remote.graph

Robert Collins robertc at robertcollins.net
Fri Jan 11 04:42:37 GMT 2008


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

------------------------------------------------------------
revno: 3175
revision-id:robertc at robertcollins.net-20080111044231-jxb35emhdivufnzg
parent: robertc at robertcollins.net-20080110223405-uuaxxfwv44b3ptp0
parent: pqm at pqm.ubuntu.com-20080111025153-mqrn9i5o3hqezw75
committer: Robert Collins <robertc at robertcollins.net>
branch nick: remote.graph
timestamp: Fri 2008-01-11 15:42:31 +1100
message:
  Merge get_parents full deprecation.
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: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: 3173.1.1
    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
=== modified file 'NEWS'
--- a/NEWS	2008-01-10 22:08:39 +0000
+++ b/NEWS	2008-01-11 00:44:17 +0000
@@ -152,16 +152,14 @@
 
    * get_parent_map now always provides tuples as its output.  (Aaron Bentley)
 
-   * ``Graph`` no longer requires the ``parents_provider`` to have a
-     ``get_parents`` attribute. (Robert Collins)
-
    * New method ``iter_inventories`` on Repository for access to many
      inventories. This is primarily used by the ``revision_trees`` method, as
      direct access to inventories is discouraged. (Robert Collins)
 
    * 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	2008-01-10 22:08:39 +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,15 +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.
         """
-        # get_parents is deprecated and we don't use it, so don't require it on
-        # providers.
-        self.get_parents = getattr(parents_provider, 'get_parents', None)
-        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):
@@ -228,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