~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/fetch.py

Late bind to PatienceSequenceMatcher to allow plugin to override.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2005, 2006 by Canonical Ltd
2
 
#
 
2
 
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
7
 
#
 
7
 
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
11
# GNU General Public License for more details.
12
 
#
 
12
 
13
13
# You should have received a copy of the GNU General Public License
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
33
33
 
34
34
import bzrlib
35
35
import bzrlib.errors as errors
36
 
from bzrlib.errors import (InstallFailed,
37
 
                           )
 
36
from bzrlib.errors import (InstallFailed, NoSuchRevision,
 
37
                           MissingText)
38
38
from bzrlib.trace import mutter
39
 
from bzrlib.progress import ProgressPhase
 
39
from bzrlib.progress import ProgressBar, ProgressPhase
 
40
from bzrlib.reconcile import RepoReconciler
40
41
from bzrlib.revision import NULL_REVISION
41
 
from bzrlib.symbol_versioning import (deprecated_function,
42
 
        deprecated_method,
43
 
        zero_eight,
44
 
        )
 
42
from bzrlib.symbol_versioning import *
45
43
 
46
44
 
47
45
# TODO: Avoid repeatedly opening weaves so many times.
126
124
        self.from_control = self.from_repository.control_weaves
127
125
        self.count_total = 0
128
126
        self.file_ids_names = {}
129
 
        pp = ProgressPhase('Fetch phase', 4, self.pb)
 
127
        pp = ProgressPhase('fetch phase', 4, self.pb)
130
128
        try:
131
 
            pp.next_phase()
132
129
            revs = self._revids_to_fetch()
133
130
            # something to do ?
134
131
            if revs:
160
157
    def _fetch_weave_texts(self, revs):
161
158
        texts_pb = bzrlib.ui.ui_factory.nested_progress_bar()
162
159
        try:
163
 
            # fileids_altered_by_revision_ids requires reading the inventory
164
 
            # weave, we will need to read the inventory weave again when
165
 
            # all this is done, so enable caching for that specific weave
166
 
            inv_w = self.from_repository.get_inventory_weave()
167
 
            inv_w.enable_cache()
168
160
            file_ids = self.from_repository.fileids_altered_by_revision_ids(revs)
169
161
            count = 0
170
162
            num_file_ids = len(file_ids)
178
170
                # we fetch all the texts, because texts do
179
171
                # not reference anything, and its cheap enough
180
172
                to_weave.join(from_weave, version_ids=required_versions)
181
 
                # we don't need *all* of this data anymore, but we dont know
182
 
                # what we do. This cache clearing will result in a new read 
183
 
                # of the knit data when we do the checkout, but probably we
184
 
                # want to emit the needed data on the fly rather than at the
185
 
                # end anyhow.
186
 
                # the from weave should know not to cache data being joined,
187
 
                # but its ok to ask it to clear.
188
 
                from_weave.clear_cache()
189
 
                to_weave.clear_cache()
190
173
        finally:
191
174
            texts_pb.finished()
192
175
 
199
182
    
200
183
            child_pb = bzrlib.ui.ui_factory.nested_progress_bar()
201
184
            try:
202
 
                # just merge, this is optimisable and its means we don't
 
185
                # just merge, this is optimisable and its means we dont
203
186
                # copy unreferenced data such as not-needed inventories.
204
187
                pb.update("fetch inventory", 1, 3)
205
188
                from_weave = self.from_repository.get_inventory_weave()
210
193
                # corrupt.
211
194
                to_weave.join(from_weave, pb=child_pb, msg='merge inventory',
212
195
                              version_ids=revs)
213
 
                from_weave.clear_cache()
214
196
            finally:
215
197
                child_pb.finished()
216
198
        finally:
282
264
 
283
265
 
284
266
class Fetcher(object):
285
 
    """Backwards compatibility glue for branch.fetch()."""
 
267
    """Backwards compatability glue for branch.fetch()."""
286
268
 
287
269
    @deprecated_method(zero_eight)
288
270
    def __init__(self, to_branch, from_branch, last_revision=None, pb=None):