~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/fetch.py

Merge from integration.

Show diffs side-by-side

added added

removed removed

Lines of Context:
103
103
        self.count_total = 0
104
104
        self.count_weaves = 0
105
105
        self.copied_file_ids = set()
 
106
        self.file_ids_names = {}
106
107
        if pb is None:
107
108
            self.pb = bzrlib.ui.ui_factory.progress_bar()
108
109
        else:
179
180
                continue
180
181
            if self.to_storage.has_revision(rev_id):
181
182
                continue
182
 
            self.pb.update('fetch revision', i, self.count_total)
 
183
            self.pb.update('copy revision', i, self.count_total)
183
184
            self._copy_one_revision(rev_id)
184
185
            self.count_copied += 1
185
186
 
221
222
 
222
223
    def _copy_one_weave(self, rev_id, file_id, text_revision):
223
224
        """Copy one file weave, esuring the result contains text_revision."""
 
225
        # check if the revision is already there
 
226
        if file_id in self.file_ids_names.keys( ) and \
 
227
            text_revision in self.file_ids_names[file_id]:
 
228
                return        
224
229
        to_weave = self.to_weaves.get_weave_or_empty(file_id,
225
230
            self.to_storage.get_transaction())
 
231
        if not file_id in self.file_ids_names.keys( ):
 
232
            self.file_ids_names[file_id] = to_weave.names( )
226
233
        if text_revision in to_weave:
227
234
            return
228
235
        from_weave = self.from_weaves.get_weave(file_id,
230
237
        if text_revision not in from_weave:
231
238
            raise MissingText(self.from_branch, text_revision, file_id)
232
239
        mutter('copy file {%s} modified in {%s}', file_id, rev_id)
233
 
        try:
234
 
            to_weave.join(from_weave)
235
 
        except errors.WeaveParentMismatch:
236
 
            to_weave.reweave(from_weave)
 
240
 
 
241
        if to_weave.numversions() > 0:
 
242
            # destination has contents, must merge
 
243
            try:
 
244
                to_weave.join(from_weave)
 
245
            except errors.WeaveParentMismatch:
 
246
                to_weave.reweave(from_weave)
 
247
        else:
 
248
            # destination is empty, just replace it
 
249
            to_weave = from_weave.copy( )
237
250
        self.to_weaves.put_weave(file_id, to_weave,
238
251
            self.to_storage.get_transaction())
239
252
        self.count_weaves += 1
240
253
        self.copied_file_ids.add(file_id)
 
254
        self.file_ids_names[file_id] = to_weave.names()
241
255
        mutter('copied file {%s}', file_id)
242
256
 
243
257