~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/graph.py

  • Committer: Andrew Bennetts
  • Date: 2008-01-14 22:45:15 UTC
  • mfrom: (3179 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3180.
  • Revision ID: andrew.bennetts@canonical.com-20080114224515-izp51fxci3hhopap
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
 
47
47
 
48
48
class DictParentsProvider(object):
 
49
    """A parents provider for Graph objects."""
49
50
 
50
51
    def __init__(self, ancestry):
51
52
        self.ancestry = ancestry
53
54
    def __repr__(self):
54
55
        return 'DictParentsProvider(%r)' % self.ancestry
55
56
 
56
 
    @symbol_versioning.deprecated_method(symbol_versioning.one_one)
57
 
    def get_parents(self, revisions):
58
 
        return [self.ancestry.get(r, None) for r in revisions]
59
 
 
60
57
    def get_parent_map(self, keys):
61
58
        """See _StackedParentsProvider.get_parent_map"""
62
59
        ancestry = self.ancestry
71
68
    def __repr__(self):
72
69
        return "_StackedParentsProvider(%r)" % self._parent_providers
73
70
 
74
 
    @symbol_versioning.deprecated_method(symbol_versioning.one_one)
75
 
    def get_parents(self, revision_ids):
76
 
        """Find revision ids of the parents of a list of revisions
77
 
 
78
 
        A list is returned of the same length as the input.  Each entry
79
 
        is a list of parent ids for the corresponding input revision.
80
 
 
81
 
        [NULL_REVISION] is used as the parent of the first user-committed
82
 
        revision.  Its parent list is empty.
83
 
 
84
 
        If the revision is not present (i.e. a ghost), None is used in place
85
 
        of the list of parents.
86
 
        """
87
 
        found = self.get_parent_map(revision_ids)
88
 
        return [found.get(r, None) for r in revision_ids]
89
 
 
90
71
    def get_parent_map(self, keys):
91
72
        """Get a mapping of keys => parents
92
73
 
125
106
    def __repr__(self):
126
107
        return "%s(%r)" % (self.__class__.__name__, self._real_provider)
127
108
 
128
 
    @symbol_versioning.deprecated_method(symbol_versioning.one_one)
129
 
    def get_parents(self, revision_ids):
130
 
        """See _StackedParentsProvider.get_parents"""
131
 
        found = self.get_parent_map(revision_ids)
132
 
        return [found.get(r, None) for r in revision_ids]
133
 
 
134
109
    def get_parent_map(self, keys):
135
110
        """See _StackedParentsProvider.get_parent_map"""
136
111
        needed = set()
168
143
 
169
144
        This should not normally be invoked directly, because there may be
170
145
        specialized implementations for particular repository types.  See
171
 
        Repository.get_graph()
 
146
        Repository.get_graph().
172
147
 
173
 
        :param parents_provider: An object providing a get_parents call
174
 
            conforming to the behavior of StackedParentsProvider.get_parents
 
148
        :param parents_provider: An object providing a get_parent_map call
 
149
            conforming to the behavior of
 
150
            StackedParentsProvider.get_parent_map.
175
151
        """
176
 
        self.get_parents = parents_provider.get_parents
177
 
        self.get_parent_map = parents_provider.get_parent_map
 
152
        if getattr(parents_provider, 'get_parents', None) is not None:
 
153
            self.get_parents = parents_provider.get_parents
 
154
        if getattr(parents_provider, 'get_parent_map', None) is not None:
 
155
            self.get_parent_map = parents_provider.get_parent_map
178
156
        self._parents_provider = parents_provider
179
157
 
180
158
    def __repr__(self):
226
204
        return (left.difference(right).difference(common),
227
205
                right.difference(left).difference(common))
228
206
 
 
207
    @symbol_versioning.deprecated_method(symbol_versioning.one_one)
 
208
    def get_parents(self, revisions):
 
209
        """Find revision ids of the parents of a list of revisions
 
210
 
 
211
        A list is returned of the same length as the input.  Each entry
 
212
        is a list of parent ids for the corresponding input revision.
 
213
 
 
214
        [NULL_REVISION] is used as the parent of the first user-committed
 
215
        revision.  Its parent list is empty.
 
216
 
 
217
        If the revision is not present (i.e. a ghost), None is used in place
 
218
        of the list of parents.
 
219
 
 
220
        Deprecated in bzr 1.2 - please see get_parent_map.
 
221
        """
 
222
        parents = self.get_parent_map(revisions)
 
223
        return [parent.get(r, None) for r in revisions]
 
224
 
 
225
    def get_parent_map(self, revisions):
 
226
        """Get a map of key:parent_list for revisions.
 
227
 
 
228
        This implementation delegates to get_parents, for old parent_providers
 
229
        that do not supply get_parent_map.
 
230
        """
 
231
        result = {}
 
232
        for rev, parents in self.get_parents(revisions):
 
233
            if parents is not None:
 
234
                result[rev] = parents
 
235
        return result
 
236
 
229
237
    def _make_breadth_first_searcher(self, revisions):
230
238
        return _BreadthFirstSearcher(revisions, self)
231
239