mirror of https://github.com/borgbackup/borg.git
Mostly revert "clean imports, remove unused code"
This reverts commit b7eaeee266
.
We still need the bigint stuff for compatibility to borg 1.0 archives.
# Conflicts:
# src/borg/archive.py
# src/borg/archiver.py
# src/borg/helpers.py
# src/borg/key.py
This commit is contained in:
parent
16e6e3d989
commit
04dba76fc9
|
@ -34,6 +34,7 @@ from .helpers import safe_encode, safe_decode, make_path_safe, remove_surrogates
|
|||
from .helpers import StableDict
|
||||
from .helpers import bin_to_hex
|
||||
from .helpers import safe_ns
|
||||
from .helpers import int_to_bigint, bigint_to_int
|
||||
from .helpers import ellipsis_truncate, ProgressIndicatorPercent, log_multi
|
||||
from .helpers import PathPrefixPattern, FnmatchPattern
|
||||
from .helpers import CompressionDecider1, CompressionDecider2, CompressionSpec
|
||||
|
|
|
@ -859,7 +859,7 @@ def safe_ns(ts):
|
|||
|
||||
|
||||
def safe_timestamp(item_timestamp_ns):
|
||||
t_ns = safe_ns(item_timestamp_ns)
|
||||
t_ns = safe_ns(bigint_to_int(item_timestamp_ns))
|
||||
return datetime.fromtimestamp(t_ns / 1e9)
|
||||
|
||||
|
||||
|
@ -1332,6 +1332,24 @@ class StableDict(dict):
|
|||
return sorted(super().items())
|
||||
|
||||
|
||||
def bigint_to_int(mtime):
|
||||
"""Convert bytearray to int
|
||||
"""
|
||||
if isinstance(mtime, bytes):
|
||||
return int.from_bytes(mtime, 'little', signed=True)
|
||||
return mtime
|
||||
|
||||
|
||||
def int_to_bigint(value):
|
||||
"""Convert integers larger than 64 bits to bytearray
|
||||
|
||||
Smaller integers are left alone
|
||||
"""
|
||||
if value.bit_length() > 63:
|
||||
return value.to_bytes((value.bit_length() + 9) // 8, 'little', signed=True)
|
||||
return value
|
||||
|
||||
|
||||
def is_slow_msgpack():
|
||||
return msgpack.Packer is msgpack.fallback.Packer
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ from ..helpers import prune_within, prune_split
|
|||
from ..helpers import get_cache_dir, get_keys_dir, get_security_dir
|
||||
from ..helpers import is_slow_msgpack
|
||||
from ..helpers import yes, TRUISH, FALSISH, DEFAULTISH
|
||||
from ..helpers import StableDict, bin_to_hex
|
||||
from ..helpers import StableDict, int_to_bigint, bigint_to_int, bin_to_hex
|
||||
from ..helpers import parse_timestamp, ChunkIteratorFileWrapper, ChunkerParams, Chunk
|
||||
from ..helpers import ProgressIndicatorPercent, ProgressIndicatorEndless
|
||||
from ..helpers import load_exclude_file, load_pattern_file
|
||||
|
@ -33,6 +33,18 @@ from ..helpers import safe_ns, safe_s
|
|||
from . import BaseTestCase, FakeInputs
|
||||
|
||||
|
||||
class BigIntTestCase(BaseTestCase):
|
||||
|
||||
def test_bigint(self):
|
||||
self.assert_equal(int_to_bigint(0), 0)
|
||||
self.assert_equal(int_to_bigint(2**63-1), 2**63-1)
|
||||
self.assert_equal(int_to_bigint(-2**63+1), -2**63+1)
|
||||
self.assert_equal(int_to_bigint(2**63), b'\x00\x00\x00\x00\x00\x00\x00\x80\x00')
|
||||
self.assert_equal(int_to_bigint(-2**63), b'\x00\x00\x00\x00\x00\x00\x00\x80\xff')
|
||||
self.assert_equal(bigint_to_int(int_to_bigint(-2**70)), -2**70)
|
||||
self.assert_equal(bigint_to_int(int_to_bigint(2**70)), 2**70)
|
||||
|
||||
|
||||
def test_bin_to_hex():
|
||||
assert bin_to_hex(b'') == ''
|
||||
assert bin_to_hex(b'\x00\x01\xff') == '0001ff'
|
||||
|
|
Loading…
Reference in New Issue