equal
deleted
inserted
replaced
20 import io |
20 import io |
21 import os |
21 import os |
22 import struct |
22 import struct |
23 import weakref |
23 import weakref |
24 import zlib |
24 import zlib |
|
25 |
|
26 from typing import ( |
|
27 Optional, |
|
28 Tuple, |
|
29 ) |
25 |
30 |
26 # import stuff from node for others to import from revlog |
31 # import stuff from node for others to import from revlog |
27 from .node import ( |
32 from .node import ( |
28 bin, |
33 bin, |
29 hex, |
34 hex, |
556 return None |
561 return None |
557 t = self._default_compression_header |
562 t = self._default_compression_header |
558 c = self._get_decompressor(t) |
563 c = self._get_decompressor(t) |
559 return c.decompress |
564 return c.decompress |
560 |
565 |
561 def _get_decompressor(self, t): |
566 def _get_decompressor(self, t: bytes): |
562 try: |
567 try: |
563 compressor = self._decompressors[t] |
568 compressor = self._decompressors[t] |
564 except KeyError: |
569 except KeyError: |
565 try: |
570 try: |
566 engine = util.compengines.forrevlogheader(t) |
571 engine = util.compengines.forrevlogheader(t) |
572 raise error.RevlogError( |
577 raise error.RevlogError( |
573 _(b'unknown compression type %s') % binascii.hexlify(t) |
578 _(b'unknown compression type %s') % binascii.hexlify(t) |
574 ) |
579 ) |
575 return compressor |
580 return compressor |
576 |
581 |
577 def compress(self, data): |
582 def compress(self, data: bytes) -> Tuple[bytes, bytes]: |
578 """Generate a possibly-compressed representation of data.""" |
583 """Generate a possibly-compressed representation of data.""" |
579 if not data: |
584 if not data: |
580 return b'', data |
585 return b'', data |
581 |
586 |
582 compressed = self._compressor.compress(data) |
587 compressed = self._compressor.compress(data) |
587 |
592 |
588 if data[0:1] == b'\0': |
593 if data[0:1] == b'\0': |
589 return b'', data |
594 return b'', data |
590 return b'u', data |
595 return b'u', data |
591 |
596 |
592 def decompress(self, data): |
597 def decompress(self, data: bytes): |
593 """Decompress a revlog chunk. |
598 """Decompress a revlog chunk. |
594 |
599 |
595 The chunk is expected to begin with a header identifying the |
600 The chunk is expected to begin with a header identifying the |
596 format type so it can be routed to an appropriate decompressor. |
601 format type so it can be routed to an appropriate decompressor. |
597 """ |
602 """ |
1293 _format_flags = header & ~0xFFFF |
1298 _format_flags = header & ~0xFFFF |
1294 _format_version = header & 0xFFFF |
1299 _format_version = header & 0xFFFF |
1295 |
1300 |
1296 features = FEATURES_BY_VERSION[_format_version] |
1301 features = FEATURES_BY_VERSION[_format_version] |
1297 return features[b'inline'](_format_flags) |
1302 return features[b'inline'](_format_flags) |
|
1303 |
|
1304 _docket_file: Optional[bytes] |
1298 |
1305 |
1299 def __init__( |
1306 def __init__( |
1300 self, |
1307 self, |
1301 opener, |
1308 opener, |
1302 target, |
1309 target, |
3079 cachedelta, |
3086 cachedelta, |
3080 deltacomputer=deltacomputer, |
3087 deltacomputer=deltacomputer, |
3081 sidedata=sidedata, |
3088 sidedata=sidedata, |
3082 ) |
3089 ) |
3083 |
3090 |
3084 def compress(self, data): |
3091 def compress(self, data: bytes) -> Tuple[bytes, bytes]: |
3085 return self._inner.compress(data) |
3092 return self._inner.compress(data) |
3086 |
3093 |
3087 def decompress(self, data): |
3094 def decompress(self, data): |
3088 return self._inner.decompress(data) |
3095 return self._inner.decompress(data) |
3089 |
3096 |