|
@@ -380,13 +380,18 @@ class Archiver:
|
|
return new_item
|
|
return new_item
|
|
|
|
|
|
def upgrade_compressed_chunk(chunk):
|
|
def upgrade_compressed_chunk(chunk):
|
|
|
|
+ def upgrade_zlib_and_level(chunk):
|
|
|
|
+ if ZLIB_legacy.detect(chunk):
|
|
|
|
+ ctype = ZLIB.ID
|
|
|
|
+ chunk = ctype + level + chunk # get rid of the attic legacy: prepend separate type/level bytes
|
|
|
|
+ else:
|
|
|
|
+ ctype = chunk[0:1]
|
|
|
|
+ chunk = ctype + level + chunk[2:] # keep type same, but set level
|
|
|
|
+ return chunk
|
|
|
|
+
|
|
|
|
+ ctype = chunk[0:1]
|
|
level = b'\xFF' # FF means unknown compression level
|
|
level = b'\xFF' # FF means unknown compression level
|
|
- if ZLIB_legacy.detect(chunk):
|
|
|
|
- ctype = ZLIB.ID
|
|
|
|
- chunk = ctype + level + chunk # get rid of the attic legacy: prepend separate type/level bytes
|
|
|
|
- else:
|
|
|
|
- ctype = chunk[0:1]
|
|
|
|
- chunk = ctype + level + chunk[2:] # keep type same, but set level
|
|
|
|
|
|
+
|
|
if ctype == ObfuscateSize.ID:
|
|
if ctype == ObfuscateSize.ID:
|
|
# in older borg, we used unusual byte order
|
|
# in older borg, we used unusual byte order
|
|
old_header_fmt = Struct('>I')
|
|
old_header_fmt = Struct('>I')
|
|
@@ -395,7 +400,11 @@ class Archiver:
|
|
size_bytes = chunk[2:2+length]
|
|
size_bytes = chunk[2:2+length]
|
|
size = old_header_fmt.unpack(size_bytes)
|
|
size = old_header_fmt.unpack(size_bytes)
|
|
size_bytes = new_header_fmt.pack(size)
|
|
size_bytes = new_header_fmt.pack(size)
|
|
- chunk = chunk[0:2] + size_bytes + chunk[2+length:]
|
|
|
|
|
|
+ compressed = chunk[2+length:]
|
|
|
|
+ compressed = upgrade_zlib_and_level(compressed)
|
|
|
|
+ chunk = ctype + level + size_bytes + compressed
|
|
|
|
+ else:
|
|
|
|
+ chunk = upgrade_zlib_and_level(chunk)
|
|
return chunk
|
|
return chunk
|
|
|
|
|
|
dry_run = args.dry_run
|
|
dry_run = args.dry_run
|