/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: Gustav Hartvigsson
  • Date: 2021-01-11 20:19:38 UTC
  • mfrom: (7526.3.2 work)
  • Revision ID: gustav.hartvigsson@gmail.com-20210111201938-omr9wjz3qdgyxe8k
MergedĀ lp:brz

Show diffs side-by-side

added added

removed removed

Lines of Context:
84
84
    )
85
85
from .remote import (
86
86
    RemoteGitRepository,
 
87
    RemoteGitError,
87
88
    )
88
89
from .unpeel_map import (
89
90
    UnpeelMap,
242
243
                # broken symref?
243
244
                continue
244
245
            revid = None
245
 
            if not v.startswith(SYMREF):
 
246
            if v and not v.startswith(SYMREF):
246
247
                try:
247
248
                    for (kind, type_data) in self.source_store.lookup_git_sha(
248
249
                            v):
261
262
        with self.source_store.lock_read():
262
263
            old_refs = self._get_target_bzr_refs()
263
264
            new_refs = update_refs(old_refs)
264
 
            revidmap = self.fetch_objects(
 
265
            revidmap = self.fetch_revs(
265
266
                [(git_sha, bzr_revid)
266
267
                 for (git_sha, bzr_revid) in new_refs.values()
267
268
                 if git_sha is None or not git_sha.startswith(SYMREF)],
285
286
                    result_refs[name] = (gitid, revid if not lossy else self.mapping.revision_id_foreign_to_bzr(gitid))
286
287
        return revidmap, old_refs, result_refs
287
288
 
288
 
    def fetch_objects(self, revs, lossy, limit=None):
 
289
    def fetch_revs(self, revs, lossy, limit=None):
289
290
        if not lossy and not self.mapping.roundtripping:
290
291
            for git_sha, bzr_revid in revs:
291
292
                if (bzr_revid is not None and
308
309
                        try:
309
310
                            self.mapping.revision_id_bzr_to_foreign(old_revid)
310
311
                        except InvalidRevisionId:
311
 
                            refname = self.mapping.revid_as_refname(old_revid)
312
 
                            self.target_refs[refname] = git_sha
 
312
                            pass
313
313
                    revidmap[old_revid] = (git_sha, new_revid)
314
314
                self.target_store.add_objects(object_generator)
315
315
                return revidmap
332
332
                              for revid in self.source.all_revision_ids()]
333
333
        self._warn_slow()
334
334
        try:
335
 
            revidmap = self.fetch_objects(stop_revisions, lossy=lossy)
 
335
            revidmap = self.fetch_revs(stop_revisions, lossy=lossy)
336
336
        except NoPushSupport:
337
337
            raise NoRoundtrippingSupport(self.source, self.target)
338
338
        return FetchResult(revidmap)
371
371
            return ret
372
372
        self._warn_slow()
373
373
        with self.source_store.lock_read():
374
 
            new_refs = self.target.send_pack(
 
374
            result = self.target.send_pack(
375
375
                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
376
384
        # FIXME: revidmap?
377
385
        return revidmap, self.old_refs, new_refs
378
386
 
780
788
        """Be compatible with GitRepository."""
781
789
        return (isinstance(source, RemoteGitRepository) and
782
790
                isinstance(target, LocalGitRepository))
 
791
 
 
792
 
 
793
 
 
794
class InterLocalGitRemoteGitRepository(InterToGitRepository):
 
795
 
 
796
    def fetch_refs(self, update_refs, lossy=False, overwrite=False):
 
797
        """Import the gist of the ancestry of a particular revision."""
 
798
        if lossy:
 
799
            raise LossyPushToSameVCS(self.source, self.target)
 
800
 
 
801
        def git_update_refs(old_refs):
 
802
            ret = {}
 
803
            self.old_refs = {
 
804
                k: (v, None) for (k, v) in viewitems(old_refs)}
 
805
            new_refs = update_refs(self.old_refs)
 
806
            for name, (gitid, revid) in viewitems(new_refs):
 
807
                if gitid is None:
 
808
                    gitid = self.source_store._lookup_revision_sha1(revid)
 
809
                if not overwrite:
 
810
                    if remote_divergence(
 
811
                            old_refs.get(name), gitid, self.source_store):
 
812
                        raise DivergedBranches(self.source, self.target)
 
813
                ret[name] = gitid
 
814
            return ret
 
815
        new_refs = self.target.send_pack(
 
816
            git_update_refs,
 
817
            self.source._git.generate_pack_data)
 
818
        return None, self.old_refs, new_refs
 
819
 
 
820
    @staticmethod
 
821
    def is_compatible(source, target):
 
822
        return (isinstance(source, LocalGitRepository) and
 
823
                isinstance(target, RemoteGitRepository))