~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/fetch.py

Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
 
from copy import copy
18
 
import os
19
 
from cStringIO import StringIO
20
 
 
21
 
import bzrlib
22
 
import bzrlib.errors as errors
23
 
from bzrlib.errors import (InstallFailed, NoSuchRevision, WeaveError,
24
 
                           MissingText)
25
 
from bzrlib.trace import mutter, note, warning
26
 
from bzrlib.branch import Branch
27
 
from bzrlib.progress import ProgressBar
28
 
from bzrlib.revision import NULL_REVISION
29
 
from bzrlib.xml5 import serializer_v5
30
 
from bzrlib.osutils import sha_string, split_lines
31
17
 
32
18
"""Copying of history from one branch to another.
33
19
 
44
30
memory until we've updated all of the files referenced.
45
31
"""
46
32
 
 
33
import bzrlib
 
34
import bzrlib.errors as errors
 
35
from bzrlib.errors import (InstallFailed, NoSuchRevision, WeaveError,
 
36
                           MissingText)
 
37
from bzrlib.trace import mutter
 
38
from bzrlib.progress import ProgressBar
 
39
from bzrlib.revision import NULL_REVISION
 
40
from bzrlib.symbol_versioning import *
 
41
 
 
42
 
47
43
# TODO: Avoid repeatedly opening weaves so many times.
48
44
 
49
45
# XXX: This doesn't handle ghost (not present in branch) revisions at
62
58
#   and add in all file versions
63
59
 
64
60
 
65
 
 
 
61
@deprecated_function(zero_eight)
66
62
def greedy_fetch(to_branch, from_branch, revision=None, pb=None):
 
63
    """Legacy operation, see branch.fetch(from_branch, last_revision, pb)."""
67
64
    f = Fetcher(to_branch, from_branch, revision, pb)
68
65
    return f.count_copied, f.failed_revisions
69
66
 
76
73
 
77
74
    after running:
78
75
    count_copied -- number of revisions copied
79
 
    count_weaves -- number of file weaves copied
80
76
    """
81
77
    def __init__(self, to_repository, from_repository, last_revision=None, pb=None):
 
78
        # result variables.
 
79
        self.failed_revisions = []
 
80
        self.count_copied = 0
82
81
        if to_repository.bzrdir.transport.base == from_repository.bzrdir.transport.base:
83
82
            # check that last_revision is in 'from' and then return a no-operation.
84
83
            if last_revision not in (None, NULL_REVISION):
112
111
        self.to_control = self.to_repository.control_weaves
113
112
        self.from_weaves = self.from_repository.weave_store
114
113
        self.from_control = self.from_repository.control_weaves
115
 
        self.failed_revisions = []
116
 
        self.count_copied = 0
117
114
        self.count_total = 0
118
 
        self.count_weaves = 0
119
 
        self.copied_file_ids = set()
120
115
        self.file_ids_names = {}
121
116
        try:
122
117
            revs = self._revids_to_fetch()
130
125
            self.pb.clear()
131
126
 
132
127
    def _revids_to_fetch(self):
 
128
        self.pb.update('get destination history')
133
129
        mutter('fetch up to rev {%s}', self._last_revision)
134
130
        if self._last_revision is NULL_REVISION:
135
131
            # explicit limit of no revisions needed
217
213
        from_branch
218
214
 
219
215
    count_copied -- number of revisions copied
220
 
 
221
 
    count_weaves -- number of file weaves copied
222
216
    """
223
217
    def __init__(self, to_branch, from_branch, last_revision=None, pb=None):
224
218
        if to_branch.base == from_branch.base:
251
245
        self.failed_revisions = repo_fetcher.failed_revisions
252
246
        self.count_copied = repo_fetcher.count_copied
253
247
        self.count_total = repo_fetcher.count_total
254
 
        self.count_weaves = repo_fetcher.count_weaves
255
 
        self.copied_file_ids = repo_fetcher.copied_file_ids
256
248
 
257
249
    def _find_last_revision(self):
258
250
        """Find the limiting source revision.
265
257
            return
266
258
        self.pb.update('get source history')
267
259
        from_history = self.from_branch.revision_history()
268
 
        self.pb.update('get destination history')
269
260
        if from_history:
270
261
            self._last_revision = from_history[-1]
271
262
        else:
272
263
            # no history in the source branch
273
264
            self._last_revision = NULL_REVISION
274
265
 
275
 
fetch = Fetcher
 
266
fetch = greedy_fetch