246
246
child_pb.finished()
248
def _generate_root_texts(self, revs):
249
"""This will be called by __fetch between fetching weave texts and
250
fetching the inventory weave.
252
Subclasses should override this if they need to generate root texts
253
after fetching weave texts.
258
class GenericRepoFetcher(RepoFetcher):
259
"""This is a generic repo to repo fetcher.
261
This makes minimal assumptions about repo layout and contents.
262
It triggers a reconciliation after fetching to ensure integrity.
265
def _fetch_revision_texts(self, revs, pb):
266
"""Fetch revision object texts"""
270
pb.update('copying revisions', count, total)
272
sig_text = self.from_repository.get_signature_text(rev)
273
self.to_repository.add_signature_text(rev, sig_text)
274
except errors.NoSuchRevision:
277
self._copy_revision(rev)
279
# fixup inventory if needed:
280
# this is expensive because we have no inverse index to current ghosts.
281
# but on local disk its a few seconds and sftp push is already insane.
283
# FIXME: repository should inform if this is needed.
284
self.to_repository.reconcile()
286
def _copy_revision(self, rev_id):
287
rev = self.from_repository.get_revision(rev_id)
288
self.to_repository.add_revision(rev_id, rev)
291
class KnitRepoFetcher(RepoFetcher):
292
"""This is a knit format repository specific fetcher.
294
This differs from the GenericRepoFetcher by not doing a
295
reconciliation after copying, and using knit joining to
299
248
def _fetch_revision_texts(self, revs, pb):
300
249
# may need to be a InterRevisionStore call here.
301
250
to_sf = self.to_repository.signatures
315
264
self.to_repository._fetch_order,
316
265
self.to_repository._fetch_uses_deltas))
267
def _generate_root_texts(self, revs):
268
"""This will be called by __fetch between fetching weave texts and
269
fetching the inventory weave.
271
Subclasses should override this if they need to generate root texts
272
after fetching weave texts.
277
class GenericRepoFetcher(RepoFetcher):
278
"""This is a generic repo to repo fetcher.
280
This triggers a reconciliation after fetching to ensure integrity.
283
def _fetch_revision_texts(self, revs, pb):
284
RepoFetcher._fetch_revision_texts(self, revs, pb)
285
self.to_repository.reconcile()
319
288
class Inter1and2Helper(object):
320
289
"""Helper for operations that convert data from model 1 and 2
424
393
self.target.add_revision(revision.revision_id, revision)
427
class Model1toKnit2Fetcher(GenericRepoFetcher):
396
class Model1toKnit2Fetcher(RepoFetcher):
428
397
"""Fetch from a Model1 repository into a Knit2 repository
430
399
def __init__(self, to_repository, from_repository, last_revision=None,
431
400
pb=None, find_ghosts=True):
432
401
self.helper = Inter1and2Helper(from_repository, to_repository)
433
GenericRepoFetcher.__init__(self, to_repository, from_repository,
402
RepoFetcher.__init__(self, to_repository, from_repository,
434
403
last_revision, pb, find_ghosts)
436
405
def _generate_root_texts(self, revs):
439
408
def _fetch_inventory_weave(self, revs, pb):
440
409
self.helper.regenerate_inventory(revs)
411
def _fetch_revision_texts(self, revs, pb):
412
"""Fetch revision object texts"""
416
pb.update('copying revisions', count, total)
418
sig_text = self.from_repository.get_signature_text(rev)
419
self.to_repository.add_signature_text(rev, sig_text)
420
except errors.NoSuchRevision:
423
self._copy_revision(rev)
425
# fixup inventory if needed:
426
# this is expensive because we have no inverse index to current ghosts.
427
# but on local disk its a few seconds and sftp push is already insane.
429
# FIXME: repository should inform if this is needed.
430
self.to_repository.reconcile()
442
432
def _copy_revision(self, rev):
443
433
self.helper.fetch_revisions([rev])
446
class Knit1to2Fetcher(KnitRepoFetcher):
436
class Knit1to2Fetcher(RepoFetcher):
447
437
"""Fetch from a Knit1 repository into a Knit2 repository"""
449
def __init__(self, to_repository, from_repository, last_revision=None,
439
def __init__(self, to_repository, from_repository, last_revision=None,
450
440
pb=None, find_ghosts=True):
451
441
self.helper = Inter1and2Helper(from_repository, to_repository)
452
KnitRepoFetcher.__init__(self, to_repository, from_repository,
442
RepoFetcher.__init__(self, to_repository, from_repository,
453
443
last_revision, pb, find_ghosts)
455
445
def _generate_root_texts(self, revs):