From 7bc7f013427edeff45b3f051b7ac0bd47563975c Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 13 Jul 2022 16:55:29 +0200 Subject: [PATCH] remove remainders of attic legacy we expect that everybody has upgraded to borg using borg 1.2.x or older, thus we do not need to care about attic repos any more in borg2. --- src/borg/archive.py | 2 +- src/borg/archiver/recreate.py | 3 +-- src/borg/constants.py | 2 +- src/borg/remote.py | 5 ----- src/borg/repository.py | 13 ------------- src/borg/testsuite/crypto.py | 2 +- src/borg/upgrade.py | 2 +- 7 files changed, 5 insertions(+), 24 deletions(-) diff --git a/src/borg/archive.py b/src/borg/archive.py index d346a425f9..f6a7a900db 100644 --- a/src/borg/archive.py +++ b/src/borg/archive.py @@ -1080,7 +1080,7 @@ def __init__(self, *, noatime, noctime, nobirthtime, numeric_ids, noflags, noacl def stat_simple_attrs(self, st): attrs = dict(mode=st.st_mode, uid=st.st_uid, gid=st.st_gid, mtime=safe_ns(st.st_mtime_ns)) - # borg can work with archives only having mtime (older attic archives do not have + # borg can work with archives only having mtime (very old borg archives do not have # atime/ctime). it can be useful to omit atime/ctime, if they change without the # file content changing - e.g. to get better metadata deduplication. if not self.noatime: diff --git a/src/borg/archiver/recreate.py b/src/borg/archiver/recreate.py index 0aef1d29b7..3a0a64dbdc 100644 --- a/src/borg/archiver/recreate.py +++ b/src/borg/archiver/recreate.py @@ -89,8 +89,7 @@ def build_parser_recreate(self, subparsers, common_parser, mid_common_parser): There is no risk of data loss by this. ``--chunker-params`` will re-chunk all files in the archive, this can be - used to have upgraded Borg 0.xx or Attic archives deduplicate with - Borg 1.x archives. + used to have upgraded Borg 0.xx archives deduplicate with Borg 1.x archives. **USE WITH CAUTION.** Depending on the PATHs and patterns given, recreate can be used to permanently diff --git a/src/borg/constants.py b/src/borg/constants.py index a7406a63fd..b5a0015188 100644 --- a/src/borg/constants.py +++ b/src/borg/constants.py @@ -135,7 +135,7 @@ class KeyType: # in borg 2. all of its code and also the "borg key migrate-to-repokey" command was removed. # if you still need to, you can use "borg key migrate-to-repokey" with borg 1.0, 1.1 and 1.2. # Nowadays, we just dispatch this to RepoKey and assume the passphrase was migrated to a repokey. - PASSPHRASE = 0x01 # legacy, attic and borg < 1.0 + PASSPHRASE = 0x01 # legacy, borg < 1.0 PLAINTEXT = 0x02 REPO = 0x03 BLAKE2KEYFILE = 0x04 diff --git a/src/borg/remote.py b/src/borg/remote.py index f3b7ef6f05..d841109e16 100644 --- a/src/borg/remote.py +++ b/src/borg/remote.py @@ -791,11 +791,6 @@ def handle_error(unpacked): raise IntegrityError("(not available)") else: raise IntegrityError(args[0]) - elif error == "AtticRepository": - if old_server: - raise Repository.AtticRepository("(not available)") - else: - raise Repository.AtticRepository(args[0]) elif error == "PathNotAllowed": if old_server: raise PathNotAllowed("(unknown)") diff --git a/src/borg/repository.py b/src/borg/repository.py index 3a05b09efe..38a1b93acf 100644 --- a/src/borg/repository.py +++ b/src/borg/repository.py @@ -32,8 +32,6 @@ MAGIC = b"BORG_SEG" MAGIC_LEN = len(MAGIC) -ATTIC_MAGIC = b"ATTICSEG" -assert len(ATTIC_MAGIC) == MAGIC_LEN TAG_PUT = 0 TAG_DELETE = 1 @@ -152,9 +150,6 @@ class InvalidRepository(Error): class InvalidRepositoryConfig(Error): """{} does not have a valid configuration. Check repo config [{}].""" - class AtticRepository(Error): - """Attic repository detected. Please use borg <= 1.2 to run "borg upgrade {}".""" - class CheckNeeded(ErrorWithTraceback): """Inconsistency detected. Please run "borg check {}".""" @@ -181,7 +176,6 @@ def __init__( lock=True, append_only=False, storage_quota=None, - check_segment_magic=True, make_parent_dirs=False, ): self.path = os.path.abspath(path) @@ -205,7 +199,6 @@ def __init__( self.storage_quota = storage_quota self.storage_quota_use = 0 self.transaction_doomed = None - self.check_segment_magic = check_segment_magic self.make_parent_dirs = make_parent_dirs # v2 is the default repo version for borg 2.0 # v1 repos must only be used in a read-only way, e.g. for @@ -498,12 +491,6 @@ def open(self, path, exclusive, lock_wait=None, lock=True): self.storage_quota = parse_file_size(self.config.get("repository", "storage_quota", fallback=0)) self.id = unhexlify(self.config.get("repository", "id").strip()) self.io = LoggedIO(self.path, self.max_segment_size, self.segments_per_dir) - if self.check_segment_magic: - # read a segment and check whether we are dealing with a non-upgraded Attic repository - segment = self.io.get_latest_segment() - if segment is not None and self.io.get_segment_magic(segment) == ATTIC_MAGIC: - self.close() - raise self.AtticRepository(path) def info(self): """return some infos about the repo (must be opened first)""" diff --git a/src/borg/testsuite/crypto.py b/src/borg/testsuite/crypto.py index 78a6c89492..6ab7be0267 100644 --- a/src/borg/testsuite/crypto.py +++ b/src/borg/testsuite/crypto.py @@ -34,7 +34,7 @@ def test_UNENCRYPTED(self): self.assert_equal(got_data, data) def test_AES256_CTR_HMAC_SHA256(self): - # this tests the layout as in attic / borg < 1.2 (1 type byte, no aad) + # this tests the layout as in borg < 1.2 (1 type byte, no aad) mac_key = b"Y" * 32 enc_key = b"X" * 32 iv = 0 diff --git a/src/borg/upgrade.py b/src/borg/upgrade.py index 329fa7983d..68ba59f273 100644 --- a/src/borg/upgrade.py +++ b/src/borg/upgrade.py @@ -102,7 +102,7 @@ def upgrade_compressed_chunk(self, *, chunk): def upgrade_zlib_and_level(chunk): if ZLIB_legacy.detect(chunk): ctype = ZLIB.ID - chunk = ctype + level + bytes(chunk) # get rid of the attic legacy: prepend separate type/level bytes + chunk = ctype + level + bytes(chunk) # get rid of the legacy: prepend separate type/level bytes else: ctype = bytes(chunk[0:1]) chunk = ctype + level + bytes(chunk[2:]) # keep type same, but set level