/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/branch.py

  • Committer: Jelmer Vernooij
  • Date: 2020-07-05 12:50:01 UTC
  • mfrom: (7490.40.46 work)
  • mto: (7490.40.48 work)
  • mto: This revision was merged to the branch mainline in revision 7519.
  • Revision ID: jelmer@jelmer.uk-20200705125001-7s3vo0p55szbbws7
Merge lp:brz/3.1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
"""An adapter between a Git Branch and a Bazaar Branch"""
19
19
 
 
20
from __future__ import absolute_import
20
21
 
21
 
import contextlib
22
22
from io import BytesIO
23
23
from collections import defaultdict
24
24
 
35
35
 
36
36
from .. import (
37
37
    branch,
 
38
    cleanup,
38
39
    config,
39
40
    controldir,
40
41
    errors,
49
50
from ..revision import (
50
51
    NULL_REVISION,
51
52
    )
 
53
from ..sixish import (
 
54
    text_type,
 
55
    viewitems,
 
56
    )
52
57
from ..tag import (
53
58
    Tags,
54
59
    InterTags,
242
247
            master = None
243
248
        else:
244
249
            master = self.target.branch.get_master_branch()
245
 
        with contextlib.ExitStack() as es:
 
250
        with cleanup.ExitStack() as es:
246
251
            if master is not None:
247
252
                es.enter_context(master.lock_write())
248
253
            updates, conflicts = self._merge_to(
330
335
 
331
336
    def _set_tag_dict(self, to_dict):
332
337
        extra = set(self.refs.allkeys())
333
 
        for k, revid in to_dict.items():
 
338
        for k, revid in viewitems(to_dict):
334
339
            name = tag_name_to_ref(k)
335
340
            if name in extra:
336
341
                extra.remove(name)
854
859
        :return: iterator over (ref_name, tag_name, peeled_sha1, unpeeled_sha1)
855
860
        """
856
861
        refs = self.repository.controldir.get_refs_container()
857
 
        for ref_name, unpeeled in refs.as_dict().items():
 
862
        for ref_name, unpeeled in viewitems(refs.as_dict()):
858
863
            try:
859
864
                tag_name = ref_to_tag_name(ref_name)
860
865
            except (ValueError, UnicodeDecodeError):
862
867
            peeled = refs.get_peeled(ref_name)
863
868
            if peeled is None:
864
869
                peeled = unpeeled
865
 
            if not isinstance(tag_name, str):
 
870
            if not isinstance(tag_name, text_type):
866
871
                raise TypeError(tag_name)
867
872
            yield (ref_name, tag_name, peeled, unpeeled)
868
873
 
1106
1111
        if local and not bound_location:
1107
1112
            raise errors.LocalRequiresBoundBranch()
1108
1113
        source_is_master = False
1109
 
        with contextlib.ExitStack() as es:
 
1114
        with cleanup.ExitStack() as es:
1110
1115
            es.enter_context(self.source.lock_read())
1111
1116
            if bound_location:
1112
1117
                # bound_location comes from a config file, some care has to be
1175
1180
                isinstance(target, RemoteGitBranch))
1176
1181
 
1177
1182
    def _basic_push(self, overwrite, stop_revision, tag_selector=None):
1178
 
        from .remote import parse_git_error
 
1183
        from .remote import RemoteGitError
1179
1184
        result = GitBranchPushResult()
1180
1185
        result.source_branch = self.source
1181
1186
        result.target_branch = self.target
1198
1203
                    raise errors.DivergedBranches(self.source, self.target)
1199
1204
            refs = {self.target.ref: new_ref}
1200
1205
            result.new_revid = stop_revision
1201
 
            for name, sha in (
1202
 
                    self.source.repository._git.refs.as_dict(b"refs/tags").items()):
 
1206
            for name, sha in viewitems(
 
1207
                    self.source.repository._git.refs.as_dict(b"refs/tags")):
1203
1208
                if tag_selector and not tag_selector(name):
1204
1209
                    continue
1205
1210
                if sha not in self.source.repository._git:
1213
1218
        if dw_result is not None and not isinstance(dw_result, dict):
1214
1219
            error = dw_result.ref_status.get(self.target.ref)
1215
1220
            if error:
1216
 
                raise parse_git_error(self.target.user_url, error)
 
1221
                raise RemoteGitError(error)
1217
1222
            for ref, error in dw_result.ref_status.items():
1218
1223
                if error:
1219
 
                    trace.warning('unable to open ref %s: %s', ref, error)
 
1224
                    trace.warning('unable to open ref %s: %s',
 
1225
                                  ref, error)
1220
1226
        return result
1221
1227
 
1222
1228
 
1371
1377
        if fetch_tags is None:
1372
1378
            c = self.source.get_config_stack()
1373
1379
            fetch_tags = c.get('branch.fetch_tags')
1374
 
        for name, revid in self.source.tags.get_tag_dict().items():
 
1380
        for name, revid in viewitems(self.source.tags.get_tag_dict()):
1375
1381
            if self.source.repository.has_revision(revid):
1376
1382
                ref = tag_name_to_ref(name)
1377
1383
                if not check_ref_format(ref):
1388
1394
               old_refs, new_refs)
1389
1395
        result.tag_updates = {}
1390
1396
        result.tag_conflicts = []
1391
 
        ret = {}
 
1397
        ret = dict(old_refs)
1392
1398
 
1393
1399
        def ref_equals(refs, ref, git_sha, revid):
1394
1400
            try:
1408
1414
            # updated that hasn't actually been updated.
1409
1415
            return False
1410
1416
        # FIXME: Check for diverged branches
1411
 
        for ref, (git_sha, revid) in new_refs.items():
 
1417
        for ref, (git_sha, revid) in viewitems(new_refs):
1412
1418
            if ref_equals(ret, ref, git_sha, revid):
1413
1419
                # Already up to date
1414
1420
                if git_sha is None:
1447
1453
            stop_revision = self.source.last_revision()
1448
1454
        ret = []
1449
1455
        if fetch_tags:
1450
 
            for k, v in self.source.tags.get_tag_dict().items():
 
1456
            for k, v in viewitems(self.source.tags.get_tag_dict()):
1451
1457
                ret.append((None, v))
1452
1458
        ret.append((None, stop_revision))
1453
1459
        try: