/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: 2018-11-15 23:18:25 UTC
  • mfrom: (7143.2.1 git-archive-tgz)
  • Revision ID: breezy.the.bot@gmail.com-20181115231825-4i094wx70vedh31n
Don't hardcode the list of supported archive formats.

Merged from https://code.launchpad.net/~jelmer/brz/git-archive-tgz/+merge/358746

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
from __future__ import absolute_import
20
20
 
 
21
import gzip
21
22
from io import BytesIO
22
23
import re
23
24
 
100
101
import dulwich.client
101
102
from dulwich.errors import (
102
103
    GitProtocolError,
 
104
    HangupException,
103
105
    )
104
106
from dulwich.pack import (
105
107
    Pack,
390
392
    def _gitrepository_class(self):
391
393
        return RemoteGitRepository
392
394
 
393
 
    def archive(self, format, committish, write_data, progress=None, write_error=None,
394
 
                subdirs=None, prefix=None):
395
 
        if format not in ('tar', 'zip'):
396
 
            raise errors.NoSuchExportFormat(format)
 
395
    def archive(self, format, committish, write_data, progress=None,
 
396
                write_error=None, subdirs=None, prefix=None):
397
397
        if progress is None:
398
398
            pb = ui.ui_factory.nested_progress_bar()
399
399
            progress = DefaultProgressReporter(pb).progress
400
400
        else:
401
401
            pb = None
 
402
        def progress_wrapper(message):
 
403
            if message.startswith(b"fatal: Unknown archive format \'"):
 
404
                format = message.strip()[len(b"fatal: Unknown archive format '"):-1]
 
405
                raise errors.NoSuchExportFormat(format.decode('ascii'))
 
406
            return progress(message)
402
407
        try:
403
 
            self._client.archive(self._client_path, committish,
404
 
                write_data, progress, write_error, format=format,
405
 
                subdirs=subdirs, prefix=prefix)
 
408
            self._client.archive(
 
409
                self._client_path, committish, write_data, progress_wrapper,
 
410
                write_error,
 
411
                format=(format.encode('ascii') if format else None),
 
412
                subdirs=subdirs,
 
413
                prefix=(prefix.encode('utf-8') if prefix else None))
406
414
        except GitProtocolError as e:
407
415
            raise parse_git_error(self.transport.external_url(), e)
408
416
        finally:
409
417
            if pb is not None:
410
418
                pb.finished()
411
419
 
412
 
    def fetch_pack(self, determine_wants, graph_walker, pack_data, progress=None):
 
420
    def fetch_pack(self, determine_wants, graph_walker, pack_data,
 
421
                   progress=None):
413
422
        if progress is None:
414
423
            pb = ui.ui_factory.nested_progress_bar()
415
424
            progress = DefaultProgressReporter(pb).progress
416
425
        else:
417
426
            pb = None
418
427
        try:
419
 
            result = self._client.fetch_pack(self._client_path, determine_wants,
420
 
                graph_walker, pack_data, progress)
 
428
            result = self._client.fetch_pack(
 
429
                self._client_path, determine_wants, graph_walker, pack_data,
 
430
                progress)
421
431
            if result.refs is None:
422
432
                result.refs = {}
423
 
            self._refs = remote_refs_dict_to_container(result.refs, result.symrefs)
 
433
            self._refs = remote_refs_dict_to_container(
 
434
                result.refs, result.symrefs)
424
435
            return result
425
436
        except GitProtocolError as e:
426
437
            raise parse_git_error(self.transport.external_url(), e)
434
445
            progress = DefaultProgressReporter(pb).progress
435
446
        else:
436
447
            pb = None
 
448
 
437
449
        def get_changed_refs_wrapper(refs):
438
450
            # TODO(jelmer): This drops symref information
439
451
            self._refs = remote_refs_dict_to_container(refs)
440
452
            return get_changed_refs(refs)
441
453
        try:
442
 
            return self._client.send_pack(self._client_path,
443
 
                    get_changed_refs_wrapper, generate_pack_data, progress)
 
454
            return self._client.send_pack(
 
455
                self._client_path, get_changed_refs_wrapper,
 
456
                generate_pack_data, progress)
444
457
        except GitProtocolError as e:
445
458
            raise parse_git_error(self.transport.external_url(), e)
446
459
        finally:
495
508
            nascent_ok=False):
496
509
        repo = self.open_repository()
497
510
        ref = self._get_selected_ref(name, ref)
498
 
        if not nascent_ok and ref not in self.get_refs_container():
 
511
        try:
 
512
            if not nascent_ok and ref not in self.get_refs_container():
 
513
                raise NotBranchError(self.root_transport.base,
 
514
                        controldir=self)
 
515
        except NotGitRepository:
499
516
            raise NotBranchError(self.root_transport.base,
500
517
                    controldir=self)
501
518
        ref_chain, unused_sha = self.get_refs_container().follow(ref)
548
565
                if lossy:
549
566
                    new_sha = source_store._lookup_revision_sha1(revision_id)
550
567
                else:
551
 
                    new_sha = repo.lookup_bzr_revision_id(revision_id)[0]
 
568
                    try:
 
569
                        new_sha = repo.lookup_bzr_revision_id(revision_id)[0]
 
570
                    except errors.NoSuchRevision:
 
571
                        raise errors.NoRoundtrippingSupport(
 
572
                            source, self.open_branch(name=name, nascent_ok=True))
552
573
                if not overwrite:
553
574
                    if remote_divergence(ret.get(refname), new_sha, source_store):
554
575
                        raise DivergedBranches(
680
701
                self.content_type = response.getheader("Content-Type")
681
702
                self.redirect_location = response.geturl()
682
703
 
 
704
            def readlines(self):
 
705
                return self._response.readlines()
 
706
 
683
707
            def close(self):
684
708
                self._response.close()
685
709
 
777
801
        f.seek(0)
778
802
        return osutils.file_iterator(f)
779
803
 
 
804
    def is_versioned(self, path, file_id=None):
 
805
        raise GitSmartRemoteNotSupported(self.is_versioned, self)
 
806
 
 
807
    def has_filename(self, path):
 
808
        raise GitSmartRemoteNotSupported(self.has_filename, self)
 
809
 
 
810
    def get_file_text(self, path, file_id=None):
 
811
        raise GitSmartRemoteNotSupported(self.get_file_text, self)
 
812
 
780
813
 
781
814
class RemoteGitRepository(GitRepository):
782
815
 
792
825
 
793
826
    def fetch_pack(self, determine_wants, graph_walker, pack_data,
794
827
                   progress=None):
795
 
        return self.controldir.fetch_pack(determine_wants, graph_walker,
796
 
                                          pack_data, progress)
 
828
        return self.controldir.fetch_pack(
 
829
                determine_wants, graph_walker, pack_data, progress)
797
830
 
798
831
    def send_pack(self, get_changed_refs, generate_pack_data):
799
832
        return self.controldir.send_pack(get_changed_refs, generate_pack_data)