~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/fetch.py

  • Committer: Ian Clatworthy
  • Date: 2010-02-19 03:02:07 UTC
  • mto: (4797.23.1 integration-2.1)
  • mto: This revision was merged to the branch mainline in revision 5055.
  • Revision ID: ian.clatworthy@canonical.com-20100219030207-zpbzx021zavx4sqt
What's New in 2.1 - a summary of changes since 2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
from bzrlib.lazy_import import lazy_import
29
29
lazy_import(globals(), """
30
30
from bzrlib import (
 
31
    graph as _mod_graph,
 
32
    static_tuple,
31
33
    tsort,
32
34
    versionedfile,
33
35
    )
35
37
import bzrlib
36
38
from bzrlib import (
37
39
    errors,
 
40
    symbol_versioning,
38
41
    ui,
39
42
    )
40
43
from bzrlib.revision import NULL_REVISION
49
52
    """
50
53
 
51
54
    def __init__(self, to_repository, from_repository, last_revision=None,
52
 
        find_ghosts=True, fetch_spec=None):
 
55
        pb=None, find_ghosts=True, fetch_spec=None):
53
56
        """Create a repo fetcher.
54
57
 
55
58
        :param last_revision: If set, try to limit to the data this revision
56
59
            references.
57
60
        :param find_ghosts: If True search the entire history for ghosts.
 
61
        :param pb: ProgressBar object to use; deprecated and ignored.
 
62
            This method will just create one on top of the stack.
58
63
        """
 
64
        if pb is not None:
 
65
            symbol_versioning.warn(
 
66
                symbol_versioning.deprecated_in((1, 14, 0))
 
67
                % "pb parameter to RepoFetcher.__init__")
 
68
            # and for simplicity it is in fact ignored
59
69
        # repository.fetch has the responsibility for short-circuiting
60
70
        # attempts to copy between a repository and itself.
61
71
        self.to_repository = to_repository
182
192
    This is for use by fetchers and converters.
183
193
    """
184
194
 
185
 
    # This is a class variable so that the test suite can override it.
186
 
    known_graph_threshold = 100
187
 
 
188
195
    def __init__(self, source):
189
196
        """Constructor.
190
197
 
246
253
        # yet, and are unlikely to in non-rich-root environments anyway.
247
254
        root_id_order.sort(key=operator.itemgetter(0))
248
255
        # Create a record stream containing the roots to create.
249
 
        if len(revs) > self.known_graph_threshold:
250
 
            graph = self.source.get_known_graph_ancestry(revs)
 
256
        if len(revs) > 100:
 
257
            # XXX: not covered by tests, should have a flag to always run
 
258
            # this. -- mbp 20100129
 
259
            graph = _get_rich_root_heads_graph(self.source, revs)
251
260
        new_roots_stream = _new_root_data_stream(
252
261
            root_id_order, rev_id_to_root_id, parent_map, self.source, graph)
253
262
        return [('texts', new_roots_stream)]
254
263
 
255
264
 
 
265
def _get_rich_root_heads_graph(source_repo, revision_ids):
 
266
    """Get a Graph object suitable for asking heads() for new rich roots."""
 
267
    st = static_tuple.StaticTuple
 
268
    revision_keys = [st(r_id).intern() for r_id in revision_ids]
 
269
    known_graph = source_repo.revisions.get_known_graph_ancestry(
 
270
                    revision_keys)
 
271
    return _mod_graph.GraphThunkIdsToKeys(known_graph)
 
272
 
 
273
 
256
274
def _new_root_data_stream(
257
275
    root_keys_to_create, rev_id_to_root_id_map, parent_map, repo, graph=None):
258
276
    """Generate a texts substream of synthesised root entries.