/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 breezy/git/interrepo.py

  • Committer: Jelmer Vernooij
  • Date: 2020-03-22 20:02:36 UTC
  • mto: (7490.7.7 work)
  • mto: This revision was merged to the branch mainline in revision 7501.
  • Revision ID: jelmer@jelmer.uk-20200322200236-fsbl91ktcn6fcbdd
Fix tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""InterRepository operations."""
18
18
 
 
19
from __future__ import absolute_import
 
20
 
19
21
from io import BytesIO
20
22
import itertools
21
23
 
50
52
from ..revision import (
51
53
    NULL_REVISION,
52
54
    )
 
55
from ..sixish import (
 
56
    viewitems,
 
57
    viewvalues,
 
58
    )
53
59
from .. import (
54
60
    config,
55
61
    trace,
84
90
    )
85
91
from .remote import (
86
92
    RemoteGitRepository,
87
 
    RemoteGitError,
88
93
    )
89
94
from .unpeel_map import (
90
95
    UnpeelMap,
224
229
                        new_stop_revids.append(revid)
225
230
                stop_revids = set()
226
231
                parent_map = graph.get_parent_map(new_stop_revids)
227
 
                for parent_revids in parent_map.values():
 
232
                for parent_revids in viewvalues(parent_map):
228
233
                    stop_revids.update(parent_revids)
229
234
                pb.update("determining revisions to fetch", len(missing))
230
235
        return graph.iter_topo_order(missing)
243
248
                # broken symref?
244
249
                continue
245
250
            revid = None
246
 
            if v and not v.startswith(SYMREF):
 
251
            if not v.startswith(SYMREF):
247
252
                try:
248
253
                    for (kind, type_data) in self.source_store.lookup_git_sha(
249
254
                            v):
267
272
                 for (git_sha, bzr_revid) in new_refs.values()
268
273
                 if git_sha is None or not git_sha.startswith(SYMREF)],
269
274
                lossy=lossy)
270
 
            for name, (gitid, revid) in new_refs.items():
 
275
            for name, (gitid, revid) in viewitems(new_refs):
271
276
                if gitid is None:
272
277
                    try:
273
278
                        gitid = revidmap[revid][0]
309
314
                        try:
310
315
                            self.mapping.revision_id_bzr_to_foreign(old_revid)
311
316
                        except InvalidRevisionId:
312
 
                            pass
 
317
                            refname = self.mapping.revid_as_refname(old_revid)
 
318
                            self.target_refs[refname] = git_sha
313
319
                    revidmap[old_revid] = (git_sha, new_revid)
314
320
                self.target_store.add_objects(object_generator)
315
321
                return revidmap
356
362
        def git_update_refs(old_refs):
357
363
            ret = {}
358
364
            self.old_refs = {
359
 
                k: (v, None) for (k, v) in old_refs.items()}
 
365
                k: (v, None) for (k, v) in viewitems(old_refs)}
360
366
            new_refs = update_refs(self.old_refs)
361
 
            for name, (gitid, revid) in new_refs.items():
 
367
            for name, (gitid, revid) in viewitems(new_refs):
362
368
                if gitid is None:
363
369
                    git_sha = self.source_store._lookup_revision_sha1(revid)
364
370
                    gitid = unpeel_map.re_unpeel_tag(
371
377
            return ret
372
378
        self._warn_slow()
373
379
        with self.source_store.lock_read():
374
 
            result = self.target.send_pack(
 
380
            new_refs = self.target.send_pack(
375
381
                git_update_refs, self.source_store.generate_lossy_pack_data)
376
 
            if result is not None and not isinstance(result, dict):
377
 
                for ref, error in result.ref_status.items():
378
 
                    if error:
379
 
                        raise RemoteGitError(
380
 
                            'unable to update ref %r: %s' % (ref, error))
381
 
                new_refs = result.refs
382
 
            else:  # dulwich < 0.20.3
383
 
                new_refs = result
384
382
        # FIXME: revidmap?
385
383
        return revidmap, self.old_refs, new_refs
386
384
 
417
415
 
418
416
        def determine_wants(refs):
419
417
            unpeel_lookup = {}
420
 
            for k, v in refs.items():
 
418
            for k, v in viewitems(refs):
421
419
                if k.endswith(ANNOTATED_TAG_SUFFIX):
422
420
                    unpeel_lookup[v] = refs[k[:-len(ANNOTATED_TAG_SUFFIX)]]
423
421
            potential = set([unpeel_lookup.get(w, w) for w in wants])
424
422
            if include_tags:
425
 
                for k, sha in refs.items():
 
423
                for k, sha in viewitems(refs):
426
424
                    if k.endswith(ANNOTATED_TAG_SUFFIX):
427
425
                        continue
428
426
                    try:
465
463
            if if_present_ids is not None:
466
464
                todo.update(if_present_ids)
467
465
        result_set = todo.difference(self.target.all_revision_ids())
468
 
        result_parents = set(itertools.chain.from_iterable(
469
 
            self.source.get_graph().get_parent_map(result_set).values()))
 
466
        result_parents = set(itertools.chain.from_iterable(viewvalues(
 
467
            self.source.get_graph().get_parent_map(result_set))))
470
468
        included_keys = result_set.intersection(result_parents)
471
469
        start_keys = result_set.difference(included_keys)
472
470
        exclude_keys = result_parents.difference(result_set)
491
489
 
492
490
    def determine_wants_all(self, refs):
493
491
        potential = set()
494
 
        for k, v in refs.items():
 
492
        for k, v in viewitems(refs):
495
493
            # For non-git target repositories, only worry about peeled
496
494
            if v == ZERO_SHA:
497
495
                continue
565
563
        all_revs = self.target.all_revision_ids()
566
564
        parent_map = self.target.get_parent_map(all_revs)
567
565
        all_parents = set()
568
 
        for values in parent_map.values():
 
566
        for values in viewvalues(parent_map):
569
567
            all_parents.update(values)
570
568
        return set(all_revs) - all_parents
571
569
 
649
647
 
650
648
        def determine_wants(heads):
651
649
            old_refs = dict([(k, (v, None))
652
 
                             for (k, v) in heads.as_dict().items()])
 
650
                             for (k, v) in viewitems(heads.as_dict())])
653
651
            new_refs = update_refs(old_refs)
654
652
            ref_changes.update(new_refs)
655
 
            return [sha1 for (sha1, bzr_revid) in new_refs.values()]
 
653
            return [sha1 for (sha1, bzr_revid) in viewvalues(new_refs)]
656
654
        self.fetch_objects(determine_wants, lossy=lossy)
657
 
        for k, (git_sha, bzr_revid) in ref_changes.items():
 
655
        for k, (git_sha, bzr_revid) in viewitems(ref_changes):
658
656
            self.target._git.refs[k] = git_sha
659
657
        new_refs = self.target.controldir.get_refs_container()
660
658
        return None, old_refs, new_refs
708
706
    def get_determine_wants_branches(self, branches, include_tags=False):
709
707
        def determine_wants(refs):
710
708
            ret = []
711
 
            for name, value in refs.items():
 
709
            for name, value in viewitems(refs):
712
710
                if value == ZERO_SHA:
713
711
                    continue
714
712