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

  • Committer: Breezy landing bot
  • Author(s): Jelmer Vernooij
  • Date: 2020-06-12 01:45:56 UTC
  • mfrom: (7513.1.2 pypy3)
  • Revision ID: breezy.the.bot@gmail.com-20200612014556-tsc8assk3d0luziu
Avoid deprecated behaviour in ElementTree.

Merged from https://code.launchpad.net/~jelmer/brz/pypy3/+merge/385611

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Remote dirs, repositories and branches."""
18
18
 
19
 
from __future__ import absolute_import
20
 
 
21
19
import gzip
22
20
from io import BytesIO
23
21
import re
50
48
    )
51
49
from ..revision import NULL_REVISION
52
50
from ..revisiontree import RevisionTree
53
 
from ..sixish import (
54
 
    text_type,
55
 
    viewitems,
56
 
    )
57
51
from ..transport import (
58
52
    Transport,
59
53
    register_urlparse_netloc_protocol,
123
117
import select
124
118
import tempfile
125
119
 
126
 
try:
127
 
    import urllib.parse as urlparse
128
 
    from urllib.parse import splituser
129
 
except ImportError:
130
 
    import urlparse
131
 
    from urllib import splituser
 
120
import urllib.parse as urlparse
 
121
from urllib.parse import splituser
132
122
 
133
123
# urlparse only supports a limited number of schemes by default
134
124
register_urlparse_netloc_protocol('git')
221
211
    return RemoteGitError(message)
222
212
 
223
213
 
 
214
def parse_git_hangup(url, e):
 
215
    """Parse the error lines from a git servers stderr on hangup.
 
216
 
 
217
    :param url: URL of the remote repository
 
218
    :param e: A HangupException
 
219
    """
 
220
    stderr_lines = getattr(e, 'stderr_lines', None)
 
221
    if not stderr_lines:
 
222
        return e
 
223
    interesting_lines = [
 
224
        line for line in stderr_lines
 
225
        if line and line.replace(b'=', b'')]
 
226
    if len(interesting_lines) == 1:
 
227
        interesting_line = interesting_lines[0]
 
228
        return parse_git_error(
 
229
            url, interesting_line.decode('utf-8', 'surrogateescape'))
 
230
    return RemoteGitError(
 
231
        b'\n'.join(stderr_lines).decode('utf-8', 'surrogateescape'))
 
232
 
 
233
 
224
234
class GitSmartTransport(Transport):
225
235
 
226
236
    def __init__(self, url, _client=None):
420
430
                prefix=(prefix.encode('utf-8') if prefix else None))
421
431
        except GitProtocolError as e:
422
432
            raise parse_git_error(self.transport.external_url(), e)
 
433
        except HangupException as e:
 
434
            raise parse_git_hangup(self.transport.external_url(), e)
423
435
        finally:
424
436
            if pb is not None:
425
437
                pb.finished()
442
454
            return result
443
455
        except GitProtocolError as e:
444
456
            raise parse_git_error(self.transport.external_url(), e)
 
457
        except HangupException as e:
 
458
            raise parse_git_hangup(self.transport.external_url(), e)
445
459
        finally:
446
460
            if pb is not None:
447
461
                pb.finished()
463
477
                generate_pack_data, progress)
464
478
        except GitProtocolError as e:
465
479
            raise parse_git_error(self.transport.external_url(), e)
 
480
        except HangupException as e:
 
481
            raise parse_git_hangup(self.transport.external_url(), e)
466
482
        finally:
467
483
            if pb is not None:
468
484
                pb.finished()
599
615
                        source, self.open_branch(name, nascent_ok=True))
600
616
            ret[actual_refname] = new_sha
601
617
            if fetch_tags:
602
 
                for tagname, revid in viewitems(source.tags.get_tag_dict()):
 
618
                for tagname, revid in source.tags.get_tag_dict().items():
603
619
                    if tag_selector and not tag_selector(tagname):
604
620
                        continue
605
621
                    if lossy:
616
632
                    ret[tag_name_to_ref(tagname)] = new_sha
617
633
            return ret
618
634
        with source_store.lock_read():
619
 
            if lossy:
620
 
                generate_pack_data = source_store.generate_lossy_pack_data
621
 
            else:
622
 
                generate_pack_data = source_store.generate_pack_data
 
635
            def generate_pack_data(have, want, progress=None,
 
636
                                   ofs_delta=True):
 
637
                git_repo = getattr(source.repository, '_git', None)
 
638
                if git_repo:
 
639
                    shallow = git_repo.get_shallow()
 
640
                else:
 
641
                    shallow = None
 
642
                if lossy:
 
643
                    return source_store.generate_lossy_pack_data(
 
644
                        have, want, shallow=shallow,
 
645
                        progress=progress, ofs_delta=ofs_delta)
 
646
                elif shallow:
 
647
                    return source_store.generate_pack_data(
 
648
                        have, want, shallow=shallow,
 
649
                        progress=progress, ofs_delta=ofs_delta)
 
650
                else:
 
651
                    return source_store.generate_pack_data(
 
652
                        have, want, progress=progress, ofs_delta=ofs_delta)
623
653
            new_refs = self.send_pack(get_changed_refs, generate_pack_data)
624
654
        push_result.new_revid = repo.lookup_foreign_revision_id(
625
655
            new_refs[actual_refname])
1009
1039
            if peeled is None:
1010
1040
                # Let's just hope it's a commit
1011
1041
                peeled = unpeeled
1012
 
            if not isinstance(tag_name, text_type):
 
1042
            if not isinstance(tag_name, str):
1013
1043
                raise TypeError(tag_name)
1014
1044
            yield (ref_name, tag_name, peeled, unpeeled)
1015
1045