~lifeless/bzr-git/bug-526133

« back to all changes in this revision

Viewing changes to fetch.py

  • Committer: Jelmer Vernooij
  • Date: 2010-02-18 12:04:46 UTC
  • mfrom: (720.1.8 partial-fetch)
  • Revision ID: jelmer@samba.org-20100218120446-lj4y1l8d0s1hyt02
Merge partial fetch support from Michael.

Show diffs side-by-side

added added

removed removed

Lines of Context:
346
346
 
347
347
 
348
348
def import_git_objects(repo, mapping, object_iter, target_git_object_retriever,
349
 
        heads, pb=None):
 
349
        heads, pb=None, limit=None):
350
350
    """Import a set of git objects into a bzr repository.
351
351
 
352
352
    :param repo: Target Bazaar repository
396
396
    batch_size = 100
397
397
    revision_ids = topo_sort(graph)
398
398
    pack_hints = []
 
399
    if limit is not None:
 
400
        revision_ids = revision_ids[:limit]
 
401
    last_imported = None
399
402
    for offset in range(0, len(revision_ids), batch_size):
400
403
        repo.start_write_group()
401
404
        try:
405
408
                import_git_commit(repo, mapping, head, lookup_object,
406
409
                                  target_git_object_retriever,
407
410
                                  parent_invs_cache)
 
411
                last_imported = head
408
412
        except:
409
413
            repo.abort_write_group()
410
414
            raise
413
417
            if hint is not None:
414
418
                pack_hints.extend(hint)
415
419
    target_git_object_retriever._idmap.commit_write_group()
416
 
    return pack_hints
 
420
    return pack_hints, last_imported
417
421
 
418
422
 
419
423
class InterGitRepository(InterRepository):
456
460
            else:
457
461
                ret = [mapping.revision_id_bzr_to_foreign(revid)[0] for revid in interesting_heads if revid not in (None, NULL_REVISION)]
458
462
            return [rev for rev in ret if not self.target.has_revision(mapping.revision_id_foreign_to_bzr(rev))]
459
 
        pack_hint = self.fetch_objects(determine_wants, mapping, pb)
 
463
        pack_hint = self.fetch_objects(determine_wants, mapping, pb)[0]
460
464
        if pack_hint is not None and self.target._format.pack_compresses:
461
465
            self.target.pack(hint=pack_hint)
462
466
        if interesting_heads is not None:
490
494
        map(all_parents.update, parent_map.itervalues())
491
495
        return set(all_revs) - all_parents
492
496
 
493
 
    def fetch_objects(self, determine_wants, mapping, pb=None):
 
497
    def fetch_objects(self, determine_wants, mapping, pb=None, limit=None):
494
498
        def progress(text):
495
499
            report_git_progress(pb, text)
496
500
        store = BazaarObjectStore(self.target, mapping)
514
518
                            record_determine_wants, graph_walker,
515
519
                            store.get_raw, progress)
516
520
                return import_git_objects(self.target, mapping,
517
 
                    objects_iter, store, recorded_wants, pb)
 
521
                    objects_iter, store, recorded_wants, pb, limit)
518
522
            finally:
519
523
                if create_pb:
520
524
                    create_pb.finished()
534
538
    """InterRepository that copies revisions from a local Git into a non-Git
535
539
    repository."""
536
540
 
537
 
    def fetch_objects(self, determine_wants, mapping, pb=None):
 
541
    def fetch_objects(self, determine_wants, mapping, pb=None, limit=None):
538
542
        wants = determine_wants(self.source._git.get_refs())
539
543
        create_pb = None
540
544
        if pb is None:
545
549
            try:
546
550
                return import_git_objects(self.target, mapping,
547
551
                    self.source._git.object_store, target_git_object_retriever,
548
 
                    wants, pb)
 
552
                    wants, pb, limit)
549
553
            finally:
550
554
                self.target.unlock()
551
555
        finally:
604
608
            determine_wants = r.object_store.determine_wants_all
605
609
        else:
606
610
            determine_wants = lambda x: [y for y in args if not y in r.object_store]
607
 
        return self.fetch_objects(determine_wants, mapping)
 
611
        return self.fetch_objects(determine_wants, mapping)[0]
608
612
 
609
613
 
610
614
    @staticmethod