diff --git a/src/borg/archive.py b/src/borg/archive.py index d346a425f..f6a7a900d 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 0aef1d29b..3a0a64dbd 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 a7406a63f..b5a001518 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 093a3e7f3..c55d363a8 100644 --- a/src/borg/remote.py +++ b/src/borg/remote.py @@ -786,11 +786,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 3a05b09ef..38a1b93ac 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 78a6c8949..6ab7be026 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 329fa7983..68ba59f27 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