~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/graph.py

resolve conflicts against trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
    revision,
24
24
    trace,
25
25
    )
26
 
from bzrlib.symbol_versioning import deprecated_function, deprecated_in
27
26
 
28
27
STEP_UNIQUE_SEARCHER_EVERY = 5
29
28
 
180
179
            self.missing_keys.add(key)
181
180
 
182
181
 
 
182
class CallableToParentsProviderAdapter(object):
 
183
    """A parents provider that adapts any callable to the parents provider API.
 
184
 
 
185
    i.e. it accepts calls to self.get_parent_map and relays them to the
 
186
    callable it was constructed with.
 
187
    """
 
188
 
 
189
    def __init__(self, a_callable):
 
190
        self.callable = a_callable
 
191
 
 
192
    def __repr__(self):
 
193
        return "%s(%r)" % (self.__class__.__name__, self.callable)
 
194
 
 
195
    def get_parent_map(self, keys):
 
196
        return self.callable(keys)
 
197
 
 
198
 
183
199
class Graph(object):
184
200
    """Provide incremental access to revision graphs.
185
201
 
234
250
        common ancestor of all border ancestors, because this shows that it
235
251
        cannot be a descendant of any border ancestor.
236
252
 
237
 
        The scaling of this operation should be proportional to
 
253
        The scaling of this operation should be proportional to:
 
254
 
238
255
        1. The number of uncommon ancestors
239
256
        2. The number of border ancestors
240
257
        3. The length of the shortest path between a border ancestor and an
372
389
 
373
390
        :param unique_revision: The revision_id whose ancestry we are
374
391
            interested in.
375
 
            XXX: Would this API be better if we allowed multiple revisions on
376
 
                 to be searched here?
 
392
            (XXX: Would this API be better if we allowed multiple revisions on
 
393
            to be searched here?)
377
394
        :param common_revisions: Revision_ids of ancestries to exclude.
378
395
        :return: A set of revisions in the ancestry of unique_revision
379
396
        """
1547
1564
 
1548
1565
        The recipe allows reconstruction of the same results at a later date.
1549
1566
 
1550
 
        :return: A tuple of (search_kind_str, *details).  The details vary by
 
1567
        :return: A tuple of `(search_kind_str, *details)`.  The details vary by
1551
1568
            kind of search result.
1552
1569
        """
1553
1570
        raise NotImplementedError(self.get_recipe)
1832
1849
    """Find all revisions missing in one repo for a some specific heads."""
1833
1850
 
1834
1851
    def __init__(self, to_repo, from_repo, required_ids, if_present_ids=None,
1835
 
            find_ghosts=False):
 
1852
            find_ghosts=False, limit=None):
1836
1853
        """Constructor.
1837
1854
 
1838
1855
        :param required_ids: revision IDs of heads that must be found, or else
1842
1859
        :param if_present_ids: revision IDs of heads that may be absent in the
1843
1860
            source repository.  If present, then their ancestry not already
1844
1861
            found in other will be included in the search result.
 
1862
        :param limit: maximum number of revisions to fetch
1845
1863
        """
1846
1864
        self.to_repo = to_repo
1847
1865
        self.from_repo = from_repo
1848
1866
        self.find_ghosts = find_ghosts
1849
1867
        self.required_ids = required_ids
1850
1868
        self.if_present_ids = if_present_ids
 
1869
        self.limit = limit
1851
1870
 
1852
1871
    def __repr__(self):
1853
1872
        if len(self.required_ids) > 5:
1859
1878
        else:
1860
1879
            ifp_revs_repr = repr(self.if_present_ids)
1861
1880
 
1862
 
        return "<%s from:%r to:%r find_ghosts:%r req'd:%r if-present:%r>" % (
1863
 
            self.__class__.__name__, self.from_repo, self.to_repo,
1864
 
            self.find_ghosts, reqd_revs_repr, ifp_revs_repr)
 
1881
        return ("<%s from:%r to:%r find_ghosts:%r req'd:%r if-present:%r"
 
1882
                "limit:%r>") % (
 
1883
                self.__class__.__name__, self.from_repo, self.to_repo,
 
1884
                self.find_ghosts, reqd_revs_repr, ifp_revs_repr,
 
1885
                self.limit)
1865
1886
 
1866
1887
    def execute(self):
1867
1888
        return self.to_repo.search_missing_revision_ids(
1868
1889
            self.from_repo, revision_ids=self.required_ids,
1869
 
            if_present_ids=self.if_present_ids, find_ghosts=self.find_ghosts)
 
1890
            if_present_ids=self.if_present_ids, find_ghosts=self.find_ghosts,
 
1891
            limit=self.limit)
1870
1892
 
1871
1893
 
1872
1894
def collapse_linear_regions(parent_map):