~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/fetch.py

  • Committer: Robert Collins
  • Date: 2006-03-06 12:11:25 UTC
  • mto: (1594.2.4 integration)
  • mto: This revision was merged to the branch mainline in revision 1596.
  • Revision ID: robertc@robertcollins.net-20060306121125-4f05992d44e3bda8
Convert Knit repositories to use knits.

Show diffs side-by-side

added added

removed removed

Lines of Context:
146
146
        except errors.NoSuchRevision:
147
147
            raise InstallFailed([self._last_revision])
148
148
 
149
 
    def _fetch_revision_texts(self, revs):
150
 
        self.to_repository.revision_store.copy_multi(
151
 
            self.from_repository.revision_store,
152
 
            revs,
153
 
            pb=self.pb)
154
 
        # fixup inventory if needed:
155
 
        # this is expensive because we have no inverse index to current ghosts.
156
 
        # but on local disk its a few seconds and sftp push is already insane.
157
 
        # so we just-do-it.
158
 
        # FIXME: the generic code path should not need this, if it truely is
159
 
        # generic.
160
 
        reconciler = RepoReconciler(self.to_repository)
161
 
        reconciler.reconcile()
162
 
 
163
149
    def _fetch_weave_texts(self, revs):
164
150
        file_ids = self.from_repository.fileid_involved_by_set(revs)
165
151
        count = 0
202
188
        self.pb.clear()
203
189
 
204
190
 
 
191
class GenericRepoFetcher(RepoFetcher):
 
192
    """This is a generic repo to repo fetcher.
 
193
 
 
194
    This makes minimal assumptions about repo layout and contents.
 
195
    It triggers a reconciliation after fetching to ensure integrity.
 
196
    """
 
197
 
 
198
    def _fetch_revision_texts(self, revs):
 
199
        self.to_transaction = self.to_repository.get_transaction()
 
200
        count = 0
 
201
        total = len(revs)
 
202
        for rev in revs:
 
203
            self.pb.update('copying revisions', count, total)
 
204
            try:
 
205
                sig_text = self.from_repository.get_signature_text(rev)
 
206
                self.to_repository._revision_store.add_revision_signature_text(
 
207
                    rev, sig_text, self.to_transaction)
 
208
            except errors.NoSuchRevision:
 
209
                # not signed.
 
210
                pass
 
211
            self.to_repository._revision_store.add_revision(
 
212
                self.from_repository.get_revision(rev),
 
213
                self.to_transaction)
 
214
            count += 1
 
215
        self.pb.update('copying revisions', count, total)
 
216
        # fixup inventory if needed: 
 
217
        # this is expensive because we have no inverse index to current ghosts.
 
218
        # but on local disk its a few seconds and sftp push is already insane.
 
219
        # so we just-do-it.
 
220
        # FIXME: repository should inform if this is needed.
 
221
        reconciler = RepoReconciler(self.to_repository)
 
222
        reconciler.reconcile()
 
223
    
 
224
 
 
225
class KnitRepoFetcher(RepoFetcher):
 
226
    """This is a knit format repository specific fetcher.
 
227
 
 
228
    This differs from the GenericRepoFetcher by not doing a 
 
229
    reconciliation after copying, and using knit joining to
 
230
    copy revision texts.
 
231
    """
 
232
 
 
233
    def _fetch_revision_texts(self, revs):
 
234
        # may need to be a InterRevisionStore call here.
 
235
        from_transaction = self.from_repository.get_transaction()
 
236
        to_transaction = self.to_repository.get_transaction()
 
237
        to_sf = self.to_repository._revision_store._get_signature_file(
 
238
            to_transaction)
 
239
        from_sf = self.from_repository._revision_store._get_signature_file(
 
240
            from_transaction)
 
241
        to_sf.join(from_sf, version_ids=revs, pb=self.pb, ignore_missing=True)
 
242
        to_rf = self.to_repository._revision_store.get_revision_file(
 
243
            to_transaction)
 
244
        from_rf = self.from_repository._revision_store.get_revision_file(
 
245
            from_transaction)
 
246
        to_rf.join(from_rf, version_ids=revs, pb=self.pb)
 
247
        reconciler = RepoReconciler(self.to_repository)
 
248
        reconciler.reconcile()
 
249
 
 
250
 
205
251
class Fetcher(object):
206
252
    """Backwards compatability glue for branch.fetch()."""
207
253