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

  • Committer: Jelmer Vernooij
  • Date: 2020-05-06 02:13:25 UTC
  • mfrom: (7490.7.21 work)
  • mto: This revision was merged to the branch mainline in revision 7501.
  • Revision ID: jelmer@jelmer.uk-20200506021325-awbmmqu1zyorz7sj
Merge 3.1 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
424
424
                    _mod_transport.get_transport_from_path(commondir)
425
425
        else:
426
426
            self._commontransport = self._controltransport
427
 
        object_store = TransportObjectStore(
428
 
            self._commontransport.clone(OBJECTDIR))
 
427
        config = self.get_config()
 
428
        object_store = TransportObjectStore.from_config(
 
429
            self._commontransport.clone(OBJECTDIR),
 
430
            config)
429
431
        if refs_text is not None:
430
432
            refs_container = InfoRefsContainer(BytesIO(refs_text))
431
433
            try:
512
514
        backends.extend(StackedConfig.default_backends())
513
515
        return StackedConfig(backends, writable=writable)
514
516
 
 
517
    # Here for compatibility with dulwich < 0.19.17
 
518
    def generate_pack_data(self, have, want, progress=None, ofs_delta=None):
 
519
        """Generate pack data objects for a set of wants/haves.
 
520
 
 
521
        Args:
 
522
          have: List of SHA1s of objects that should not be sent
 
523
          want: List of SHA1s of objects that should be sent
 
524
          ofs_delta: Whether OFS deltas can be included
 
525
          progress: Optional progress reporting method
 
526
        """
 
527
        shallow = self.get_shallow()
 
528
        if shallow:
 
529
            return self.object_store.generate_pack_data(
 
530
                have, want, shallow=shallow,
 
531
                progress=progress, ofs_delta=ofs_delta)
 
532
        else:
 
533
            return self.object_store.generate_pack_data(
 
534
                have, want, progress=progress, ofs_delta=ofs_delta)
 
535
 
515
536
    def __repr__(self):
516
537
        return "<%s for %r>" % (self.__class__.__name__, self.transport)
517
538
 
544
565
class TransportObjectStore(PackBasedObjectStore):
545
566
    """Git-style object store that exists on disk."""
546
567
 
547
 
    def __init__(self, transport):
 
568
    def __init__(self, transport,
 
569
                 loose_compression_level=-1, pack_compression_level=-1):
548
570
        """Open an object store.
549
571
 
550
572
        :param transport: Transport to open data from
551
573
        """
552
574
        super(TransportObjectStore, self).__init__()
 
575
        self.pack_compression_level = pack_compression_level
 
576
        self.loose_compression_level = loose_compression_level
553
577
        self.transport = transport
554
578
        self.pack_transport = self.transport.clone(PACKDIR)
555
579
        self._alternates = None
556
580
 
 
581
    @classmethod
 
582
    def from_config(cls, path, config):
 
583
        try:
 
584
            default_compression_level = int(config.get(
 
585
                (b'core', ), b'compression').decode())
 
586
        except KeyError:
 
587
            default_compression_level = -1
 
588
        try:
 
589
            loose_compression_level = int(config.get(
 
590
                (b'core', ), b'looseCompression').decode())
 
591
        except KeyError:
 
592
            loose_compression_level = default_compression_level
 
593
        try:
 
594
            pack_compression_level = int(config.get(
 
595
                (b'core', ), 'packCompression').decode())
 
596
        except KeyError:
 
597
            pack_compression_level = default_compression_level
 
598
        return cls(path, loose_compression_level, pack_compression_level)
 
599
 
557
600
    def __eq__(self, other):
558
601
        if not isinstance(other, TransportObjectStore):
559
602
            return False
686
729
        path = urlutils.quote_from_bytes(osutils.pathjoin(dir, file))
687
730
        if self.transport.has(path):
688
731
            return  # Already there, no need to write again
689
 
        self.transport.put_bytes(path, obj.as_legacy_object())
 
732
        # Backwards compatibility with Dulwich < 0.20, which doesn't support
 
733
        # the compression_level parameter.
 
734
        if self.loose_compression_level not in (-1, None):
 
735
            raw_string = obj.as_legacy_object(
 
736
                compression_level=self.loose_compression_level)
 
737
        else:
 
738
            raw_string = obj.as_legacy_object()
 
739
        self.transport.put_bytes(path, raw_string)
690
740
 
691
741
    def move_in_pack(self, f):
692
742
        """Move a specific file containing a pack into the pack directory.