/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to fetch.py

More work on roundtrip push support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
from bzrlib.revisiontree import (
57
57
    RevisionTree,
58
58
    )
 
59
from bzrlib.testament import (
 
60
    StrictTestament3,
 
61
    )
59
62
from bzrlib.tsort import (
60
63
    topo_sort,
61
64
    )
341
344
def import_git_commit(repo, mapping, head, lookup_object,
342
345
                      target_git_object_retriever, trees_cache):
343
346
    o = lookup_object(head)
344
 
    rev = mapping.import_commit(o,
 
347
    rev, roundtrip_revid, verifiers = mapping.import_commit(o,
345
348
            lambda x: target_git_object_retriever.lookup_git_sha(x)[1][0])
346
349
    # We have to do this here, since we have to walk the tree and
347
350
    # we need to make sure to import the blobs / trees with the right
356
359
        base_tree = lookup_object(o.parents[0]).tree
357
360
        base_mode = stat.S_IFDIR
358
361
    store_updater = target_git_object_retriever._get_updater(rev)
359
 
    store_updater.add_object(o, None, None)
360
362
    fileid_map = mapping.get_fileid_map(lookup_object, o.tree)
361
363
    inv_delta, unusual_modes = import_git_tree(repo.texts,
362
364
            mapping, "", "", (base_tree, o.tree), base_inv,
364
366
            lookup_object, (base_mode, stat.S_IFDIR), store_updater,
365
367
            fileid_map.lookup_file_id,
366
368
            allow_submodules=getattr(repo._format, "supports_tree_reference", False))
367
 
    store_updater.finish()
368
369
    if unusual_modes != {}:
369
370
        for path, mode in unusual_modes.iteritems():
370
371
            warn_unusual_mode(rev.foreign_revid, path, mode)
376
377
        base_inv = None
377
378
    rev.inventory_sha1, inv = repo.add_inventory_by_delta(basis_id,
378
379
              inv_delta, rev.revision_id, rev.parent_ids, base_inv)
 
380
    # FIXME: Check verifiers
 
381
    testament = StrictTestament3(rev, inv)
 
382
    calculated_verifiers = { "testament3-sha1": testament.as_sha1() }
 
383
    if roundtrip_revid is not None:
 
384
        original_revid = rev.revision_id
 
385
        rev.revision_id = roundtrip_revid
 
386
        if calculated_verifiers != verifiers:
 
387
            trace.mutter("Testament SHA1 %r for %r did not match %r.",
 
388
                         calculated_verifiers["testament3-sha1"],
 
389
                         rev.revision_id, verifiers["testament3-sha1"])
 
390
            rev.revision_id = original_revid
 
391
    store_updater.add_object(o, calculated_verifiers, None)
 
392
    store_updater.finish()
379
393
    ret_tree = RevisionTree(repo, inv, rev.revision_id)
380
394
    trees_cache.add(ret_tree)
381
395
    repo.add_revision(rev.revision_id, rev)
414
428
        except KeyError:
415
429
            continue
416
430
        if isinstance(o, Commit):
417
 
            rev = mapping.import_commit(o, lambda x: None)
418
 
            if repo.has_revision(rev.revision_id):
 
431
            rev, roundtrip_revid, verifiers = mapping.import_commit(o,
 
432
                lambda x: None)
 
433
            if (repo.has_revision(rev.revision_id) or
 
434
                (roundtrip_revid and repo.has_revision(roundtrip_revid))):
419
435
                continue
420
436
            graph.append((o.id, o.parents))
421
437
            heads.extend([p for p in o.parents if p not in checked])