/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-06-15 01:29:36 UTC
  • mfrom: (7490.40.4 work)
  • mto: (7490.40.19 work)
  • mto: This revision was merged to the branch mainline in revision 7516.
  • Revision ID: jelmer@jelmer.uk-20200615012936-1adqbu592y7lzmy8
Merge upstream.

Show diffs side-by-side

added added

removed removed

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