Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/borg/archive.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
3 changes: 1 addition & 2 deletions src/borg/archiver/recreate.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/borg/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 0 additions & 5 deletions src/borg/remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)")
Expand Down
13 changes: 0 additions & 13 deletions src/borg/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 {}"."""

Expand All @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -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)"""
Expand Down
2 changes: 1 addition & 1 deletion src/borg/testsuite/crypto.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/borg/upgrade.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down