소스 검색

Merge pull request #6969 from ThomasWaldmann/refactor-master

refactor, move stuff around
TW 2 년 전
부모
커밋
fe6cd9e008
44개의 변경된 파일83개의 추가작업 그리고 91개의 파일을 삭제
  1. 2 2
      setup.cfg
  2. 3 3
      src/borg/archive.py
  3. 2 2
      src/borg/archiver/common.py
  4. 1 1
      src/borg/archiver/compact.py
  5. 1 1
      src/borg/archiver/config.py
  6. 1 1
      src/borg/archiver/create.py
  7. 1 1
      src/borg/archiver/debug.py
  8. 2 2
      src/borg/archiver/delete.py
  9. 1 1
      src/borg/archiver/diff.py
  10. 1 1
      src/borg/archiver/extract.py
  11. 1 1
      src/borg/archiver/help.py
  12. 1 1
      src/borg/archiver/info.py
  13. 1 1
      src/borg/archiver/keys.py
  14. 1 1
      src/borg/archiver/list_cmd.py
  15. 1 1
      src/borg/archiver/locks.py
  16. 1 1
      src/borg/archiver/mount.py
  17. 2 5
      src/borg/archiver/prune.py
  18. 1 1
      src/borg/archiver/rcreate.py
  19. 1 2
      src/borg/archiver/rdelete.py
  20. 1 1
      src/borg/archiver/recreate.py
  21. 1 1
      src/borg/archiver/rename.py
  22. 1 1
      src/borg/archiver/rinfo.py
  23. 1 1
      src/borg/archiver/rlist.py
  24. 19 2
      src/borg/archiver/tar.py
  25. 1 1
      src/borg/archiver/transfer.py
  26. 1 1
      src/borg/cache.py
  27. 2 2
      src/borg/crypto/key.py
  28. 2 1
      src/borg/crypto/keymanager.py
  29. 1 1
      src/borg/fuse.py
  30. 1 2
      src/borg/helpers/__init__.py
  31. 0 0
      src/borg/helpers/lrucache.py
  32. 0 18
      src/borg/helpers/misc.py
  33. 1 1
      src/borg/helpers/nanorst.py
  34. 2 3
      src/borg/helpers/parseformat.py
  35. 0 0
      src/borg/helpers/shellpattern.py
  36. 11 12
      src/borg/manifest.py
  37. 1 2
      src/borg/patterns.py
  38. 3 3
      src/borg/repository.py
  39. 1 1
      src/borg/testsuite/archive.py
  40. 4 4
      src/borg/testsuite/archiver.py
  41. 1 1
      src/borg/testsuite/cache.py
  42. 1 1
      src/borg/testsuite/lrucache.py
  43. 1 1
      src/borg/testsuite/nanorst.py
  44. 1 1
      src/borg/testsuite/shellpattern.py

+ 2 - 2
setup.cfg

@@ -135,9 +135,9 @@ per_file_ignores =
     src/borg/fuse.py:E402,E501,E722,W504
     src/borg/fuse.py:E402,E501,E722,W504
     src/borg/fuse_impl.py:F811
     src/borg/fuse_impl.py:F811
     src/borg/locking.py:E128,E501,E722
     src/borg/locking.py:E128,E501,E722
+    src/borg/manifest.py:E128,E402,E501,F405
     src/borg/remote.py:E128,E501,F405
     src/borg/remote.py:E128,E501,F405
     src/borg/repository.py:E126,E128,E501,F401,F405,W504
     src/borg/repository.py:E126,E128,E501,F401,F405,W504
-    src/borg/shellpattern.py:E501
     src/borg/upgrader.py:E501
     src/borg/upgrader.py:E501
     src/borg/xattr.py:E402
     src/borg/xattr.py:E402
     src/borg/crypto/key.py:E125,E128,E402,E501,F401,F405,W504
     src/borg/crypto/key.py:E125,E128,E402,E501,F401,F405,W504
@@ -147,12 +147,12 @@ per_file_ignores =
     src/borg/helpers/checks.py:F401
     src/borg/helpers/checks.py:F401
     src/borg/helpers/errors.py:F405
     src/borg/helpers/errors.py:F405
     src/borg/helpers/fs.py:F405
     src/borg/helpers/fs.py:F405
-    src/borg/helpers/manifest.py:E128,E402,E501,F405
     src/borg/helpers/misc.py:E402,E722,F401,F405
     src/borg/helpers/misc.py:E402,E722,F401,F405
     src/borg/helpers/msgpack.py:E127,F405
     src/borg/helpers/msgpack.py:E127,F405
     src/borg/helpers/parseformat.py:E402,E501,E741,F401,F405
     src/borg/helpers/parseformat.py:E402,E501,E741,F401,F405
     src/borg/helpers/process.py:E402,F401,W504
     src/borg/helpers/process.py:E402,F401,W504
     src/borg/helpers/progress.py:E402
     src/borg/helpers/progress.py:E402
+    src/borg/helpers/shellpattern.py:E501
     src/borg/platform/__init__.py:F401,F811
     src/borg/platform/__init__.py:F401,F811
     src/borg/platform/base.py:E402
     src/borg/platform/base.py:E402
     src/borg/testsuite/__init__.py:E501,F401
     src/borg/testsuite/__init__.py:E501,F401

+ 3 - 3
src/borg/archive.py

@@ -13,7 +13,7 @@ from io import BytesIO
 from itertools import groupby, zip_longest
 from itertools import groupby, zip_longest
 from shutil import get_terminal_size
 from shutil import get_terminal_size
 
 
-from .platformflags import is_win32, is_linux, is_freebsd, is_darwin
+from .platformflags import is_win32
 from .logger import create_logger
 from .logger import create_logger
 
 
 logger = create_logger()
 logger = create_logger()
@@ -26,7 +26,6 @@ from .compress import Compressor, CompressionSpec
 from .constants import *  # NOQA
 from .constants import *  # NOQA
 from .crypto.low_level import IntegrityError as IntegrityErrorBase
 from .crypto.low_level import IntegrityError as IntegrityErrorBase
 from .hashindex import ChunkIndex, ChunkIndexEntry, CacheSynchronizer
 from .hashindex import ChunkIndex, ChunkIndexEntry, CacheSynchronizer
-from .helpers import Manifest
 from .helpers import HardLinkManager
 from .helpers import HardLinkManager
 from .helpers import ChunkIteratorFileWrapper, open_item
 from .helpers import ChunkIteratorFileWrapper, open_item
 from .helpers import Error, IntegrityError, set_ec
 from .helpers import Error, IntegrityError, set_ec
@@ -42,7 +41,8 @@ from .helpers import os_open, flags_normal, flags_dir
 from .helpers import os_stat
 from .helpers import os_stat
 from .helpers import msgpack
 from .helpers import msgpack
 from .helpers import sig_int
 from .helpers import sig_int
-from .lrucache import LRUCache
+from .helpers.lrucache import LRUCache
+from .manifest import Manifest
 from .patterns import PathPrefixPattern, FnmatchPattern, IECommand
 from .patterns import PathPrefixPattern, FnmatchPattern, IECommand
 from .item import Item, ArchiveItem, ItemDiff
 from .item import Item, ArchiveItem, ItemDiff
 from .platform import acl_get, acl_set, set_flags, get_flags, swidth, hostname
 from .platform import acl_get, acl_set, set_flags, get_flags, swidth, hostname

+ 2 - 2
src/borg/archiver/common.py

@@ -8,12 +8,12 @@ from ..archive import Archive
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
 from ..cache import Cache, assert_secure
 from ..cache import Cache, assert_secure
 from ..helpers import Error
 from ..helpers import Error
-from ..helpers import Manifest, AI_HUMAN_SORT_KEYS
 from ..helpers import GlobSpec, SortBySpec, positive_int_validator, location_validator, Location
 from ..helpers import GlobSpec, SortBySpec, positive_int_validator, location_validator, Location
+from ..helpers.nanorst import rst_to_terminal
+from ..manifest import Manifest, AI_HUMAN_SORT_KEYS
 from ..patterns import PatternMatcher
 from ..patterns import PatternMatcher
 from ..remote import RemoteRepository
 from ..remote import RemoteRepository
 from ..repository import Repository
 from ..repository import Repository
-from ..nanorst import rst_to_terminal
 from ..patterns import (
 from ..patterns import (
     ArgparsePatternAction,
     ArgparsePatternAction,
     ArgparseExcludeFileAction,
     ArgparseExcludeFileAction,

+ 1 - 1
src/borg/archiver/compact.py

@@ -3,7 +3,7 @@ import argparse
 from .common import with_repository
 from .common import with_repository
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
 from ..helpers import EXIT_SUCCESS
 from ..helpers import EXIT_SUCCESS
-from ..helpers import Manifest
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/config.py

@@ -10,7 +10,7 @@ from ..helpers import EXIT_SUCCESS, EXIT_WARNING
 from ..helpers import Error
 from ..helpers import Error
 from ..helpers import Location
 from ..helpers import Location
 from ..helpers import parse_file_size
 from ..helpers import parse_file_size
-from ..helpers import Manifest
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/create.py

@@ -21,13 +21,13 @@ from ..helpers import NameSpec, CommentSpec, FilesCacheMode
 from ..helpers import eval_escapes
 from ..helpers import eval_escapes
 from ..helpers import timestamp
 from ..helpers import timestamp
 from ..helpers import get_cache_dir, os_stat
 from ..helpers import get_cache_dir, os_stat
-from ..helpers import Manifest
 from ..helpers import dir_is_tagged
 from ..helpers import dir_is_tagged
 from ..helpers import log_multi
 from ..helpers import log_multi
 from ..helpers import basic_json_data, json_print
 from ..helpers import basic_json_data, json_print
 from ..helpers import flags_root, flags_dir, flags_special_follow, flags_special
 from ..helpers import flags_root, flags_dir, flags_special_follow, flags_special
 from ..helpers import sig_int, ignore_sigint
 from ..helpers import sig_int, ignore_sigint
 from ..helpers import iter_separated
 from ..helpers import iter_separated
+from ..manifest import Manifest
 from ..patterns import PatternMatcher
 from ..patterns import PatternMatcher
 from ..platform import get_flags
 from ..platform import get_flags
 from ..platform import uid2user, gid2group
 from ..platform import uid2user, gid2group

+ 1 - 1
src/borg/archiver/debug.py

@@ -10,10 +10,10 @@ from ..constants import *  # NOQA
 from ..helpers import msgpack
 from ..helpers import msgpack
 from ..helpers import sysinfo
 from ..helpers import sysinfo
 from ..helpers import bin_to_hex, prepare_dump_dict
 from ..helpers import bin_to_hex, prepare_dump_dict
-from ..helpers import Manifest
 from ..helpers import dash_open
 from ..helpers import dash_open
 from ..helpers import StableDict
 from ..helpers import StableDict
 from ..helpers import positive_int_validator, NameSpec
 from ..helpers import positive_int_validator, NameSpec
+from ..manifest import Manifest
 from ..platform import get_process_id
 from ..platform import get_process_id
 from ..repository import Repository, LIST_SCAN_LIMIT, TAG_PUT, TAG_DELETE, TAG_COMMIT
 from ..repository import Repository, LIST_SCAN_LIMIT, TAG_PUT, TAG_DELETE, TAG_COMMIT
 
 

+ 2 - 2
src/borg/archiver/delete.py

@@ -5,8 +5,8 @@ from .common import with_repository
 from ..archive import Archive, Statistics
 from ..archive import Archive, Statistics
 from ..cache import Cache
 from ..cache import Cache
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
-from ..helpers import Manifest, sig_int
-from ..helpers import log_multi, format_archive
+from ..helpers import log_multi, format_archive, sig_int
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/diff.py

@@ -5,7 +5,7 @@ from .common import with_repository, with_archive, build_matcher
 from ..archive import Archive
 from ..archive import Archive
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
 from ..helpers import archivename_validator
 from ..helpers import archivename_validator
-from ..helpers import Manifest
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/extract.py

@@ -10,9 +10,9 @@ from ..archive import BackupError, BackupOSError
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
 from ..helpers import NameSpec
 from ..helpers import NameSpec
 from ..helpers import remove_surrogates
 from ..helpers import remove_surrogates
-from ..helpers import Manifest
 from ..helpers import HardLinkManager
 from ..helpers import HardLinkManager
 from ..helpers import ProgressIndicatorPercent
 from ..helpers import ProgressIndicatorPercent
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/help.py

@@ -3,7 +3,7 @@ import functools
 import textwrap
 import textwrap
 
 
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
-from ..nanorst import rst_to_terminal
+from ..helpers.nanorst import rst_to_terminal
 
 
 
 
 class HelpMixIn:
 class HelpMixIn:

+ 1 - 1
src/borg/archiver/info.py

@@ -6,8 +6,8 @@ from datetime import timedelta
 from .common import with_repository
 from .common import with_repository
 from ..archive import Archive
 from ..archive import Archive
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
-from ..helpers import Manifest
 from ..helpers import remove_surrogates, format_timedelta, json_print, basic_json_data
 from ..helpers import remove_surrogates, format_timedelta, json_print, basic_json_data
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/keys.py

@@ -6,7 +6,7 @@ from ..constants import *  # NOQA
 from ..crypto.key import AESOCBRepoKey, CHPORepoKey, Blake2AESOCBRepoKey, Blake2CHPORepoKey
 from ..crypto.key import AESOCBRepoKey, CHPORepoKey, Blake2AESOCBRepoKey, Blake2CHPORepoKey
 from ..crypto.key import AESOCBKeyfileKey, CHPOKeyfileKey, Blake2AESOCBKeyfileKey, Blake2CHPOKeyfileKey
 from ..crypto.key import AESOCBKeyfileKey, CHPOKeyfileKey, Blake2AESOCBKeyfileKey, Blake2CHPOKeyfileKey
 from ..crypto.keymanager import KeyManager
 from ..crypto.keymanager import KeyManager
-from ..helpers import Manifest
+from ..manifest import Manifest
 
 
 from .common import with_repository
 from .common import with_repository
 
 

+ 1 - 1
src/borg/archiver/list_cmd.py

@@ -6,8 +6,8 @@ from .common import with_repository, build_matcher
 from ..archive import Archive
 from ..archive import Archive
 from ..cache import Cache
 from ..cache import Cache
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
-from ..helpers import Manifest
 from ..helpers import ItemFormatter, BaseFormatter, NameSpec
 from ..helpers import ItemFormatter, BaseFormatter, NameSpec
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/locks.py

@@ -4,8 +4,8 @@ import subprocess
 from .common import with_repository
 from .common import with_repository
 from ..cache import Cache
 from ..cache import Cache
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
-from ..helpers import Manifest
 from ..helpers import prepare_subprocess_env
 from ..helpers import prepare_subprocess_env
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/mount.py

@@ -4,8 +4,8 @@ import os
 from .common import with_repository, Highlander
 from .common import with_repository, Highlander
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
 from ..helpers import EXIT_ERROR
 from ..helpers import EXIT_ERROR
-from ..helpers import Manifest
 from ..helpers import umount
 from ..helpers import umount
+from ..manifest import Manifest
 from ..remote import cache_if_remote
 from ..remote import cache_if_remote
 
 
 from ..logger import create_logger
 from ..logger import create_logger

+ 2 - 5
src/borg/archiver/prune.py

@@ -9,11 +9,8 @@ from .common import with_repository
 from ..archive import Archive, Statistics
 from ..archive import Archive, Statistics
 from ..cache import Cache
 from ..cache import Cache
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
-from ..helpers import format_archive
-from ..helpers import interval
-from ..helpers import Manifest, sig_int
-from ..helpers import log_multi
-from ..helpers import ProgressIndicatorPercent
+from ..helpers import format_archive, interval, sig_int, log_multi, ProgressIndicatorPercent
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/rcreate.py

@@ -7,7 +7,7 @@ from ..crypto.key import key_creator, key_argument_names, tam_required_file
 from ..helpers import EXIT_WARNING
 from ..helpers import EXIT_WARNING
 from ..helpers import location_validator, Location
 from ..helpers import location_validator, Location
 from ..helpers import parse_storage_quota
 from ..helpers import parse_storage_quota
-from ..helpers import Manifest
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 2
src/borg/archiver/rdelete.py

@@ -4,11 +4,10 @@ from .common import with_repository
 from ..cache import Cache, SecurityManager
 from ..cache import Cache, SecurityManager
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
 from ..helpers import EXIT_ERROR
 from ..helpers import EXIT_ERROR
-from ..helpers import NoManifestError
 from ..helpers import format_archive
 from ..helpers import format_archive
 from ..helpers import bin_to_hex
 from ..helpers import bin_to_hex
-from ..helpers import Manifest
 from ..helpers import yes
 from ..helpers import yes
+from ..manifest import Manifest, NoManifestError
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/recreate.py

@@ -8,7 +8,7 @@ from ..compress import CompressionSpec
 from ..helpers import archivename_validator, ChunkerParams
 from ..helpers import archivename_validator, ChunkerParams
 from ..helpers import CommentSpec
 from ..helpers import CommentSpec
 from ..helpers import timestamp
 from ..helpers import timestamp
-from ..helpers import Manifest
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/rename.py

@@ -3,7 +3,7 @@ import argparse
 from .common import with_repository, with_archive
 from .common import with_repository, with_archive
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
 from ..helpers import archivename_validator
 from ..helpers import archivename_validator
-from ..helpers import Manifest
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/rinfo.py

@@ -3,8 +3,8 @@ import textwrap
 
 
 from .common import with_repository
 from .common import with_repository
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
-from ..helpers import Manifest
 from ..helpers import bin_to_hex, json_print, basic_json_data
 from ..helpers import bin_to_hex, json_print, basic_json_data
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/archiver/rlist.py

@@ -4,8 +4,8 @@ import sys
 
 
 from .common import with_repository
 from .common import with_repository
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
-from ..helpers import Manifest
 from ..helpers import BaseFormatter, ArchiveFormatter, json_print, basic_json_data
 from ..helpers import BaseFormatter, ArchiveFormatter, json_print, basic_json_data
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 19 - 2
src/borg/archiver/tar.py

@@ -10,10 +10,8 @@ import time
 from ..archive import Archive, TarfileObjectProcessors, ChunksProcessor
 from ..archive import Archive, TarfileObjectProcessors, ChunksProcessor
 from ..compress import CompressionSpec
 from ..compress import CompressionSpec
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
-from ..helpers import Manifest
 from ..helpers import HardLinkManager
 from ..helpers import HardLinkManager
 from ..helpers import ProgressIndicatorPercent
 from ..helpers import ProgressIndicatorPercent
-from ..helpers import get_tar_filter
 from ..helpers import dash_open
 from ..helpers import dash_open
 from ..helpers import msgpack
 from ..helpers import msgpack
 from ..helpers import create_filter_process
 from ..helpers import create_filter_process
@@ -24,6 +22,7 @@ from ..helpers import remove_surrogates
 from ..helpers import timestamp
 from ..helpers import timestamp
 from ..helpers import basic_json_data, json_print
 from ..helpers import basic_json_data, json_print
 from ..helpers import log_multi
 from ..helpers import log_multi
+from ..manifest import Manifest
 
 
 from .common import with_repository, with_archive, Highlander, define_exclusion_group
 from .common import with_repository, with_archive, Highlander, define_exclusion_group
 from .common import build_matcher, build_filter
 from .common import build_matcher, build_filter
@@ -33,6 +32,24 @@ from ..logger import create_logger
 logger = create_logger(__name__)
 logger = create_logger(__name__)
 
 
 
 
+def get_tar_filter(fname, decompress):
+    # Note that filter is None if fname is '-'.
+    if fname.endswith((".tar.gz", ".tgz")):
+        filter = "gzip -d" if decompress else "gzip"
+    elif fname.endswith((".tar.bz2", ".tbz")):
+        filter = "bzip2 -d" if decompress else "bzip2"
+    elif fname.endswith((".tar.xz", ".txz")):
+        filter = "xz -d" if decompress else "xz"
+    elif fname.endswith((".tar.lz4",)):
+        filter = "lz4 -d" if decompress else "lz4"
+    elif fname.endswith((".tar.zstd",)):
+        filter = "zstd -d" if decompress else "zstd"
+    else:
+        filter = None
+    logger.debug("Automatically determined tar filter: %s", filter)
+    return filter
+
+
 class TarMixIn:
 class TarMixIn:
     @with_repository(compatibility=(Manifest.Operation.READ,))
     @with_repository(compatibility=(Manifest.Operation.READ,))
     @with_archive
     @with_archive

+ 1 - 1
src/borg/archiver/transfer.py

@@ -7,7 +7,7 @@ from ..crypto.key import uses_same_id_hash, uses_same_chunker_secret
 from ..helpers import EXIT_SUCCESS, EXIT_ERROR
 from ..helpers import EXIT_SUCCESS, EXIT_ERROR
 from ..helpers import location_validator, Location
 from ..helpers import location_validator, Location
 from ..helpers import format_file_size
 from ..helpers import format_file_size
-from ..helpers import Manifest
+from ..manifest import Manifest
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 

+ 1 - 1
src/borg/cache.py

@@ -16,7 +16,6 @@ from .constants import CACHE_README, FILES_CACHE_MODE_DISABLED
 from .hashindex import ChunkIndex, ChunkIndexEntry, CacheSynchronizer
 from .hashindex import ChunkIndex, ChunkIndexEntry, CacheSynchronizer
 from .helpers import Location
 from .helpers import Location
 from .helpers import Error
 from .helpers import Error
-from .helpers import Manifest
 from .helpers import get_cache_dir, get_security_dir
 from .helpers import get_cache_dir, get_security_dir
 from .helpers import bin_to_hex, parse_stringified_list
 from .helpers import bin_to_hex, parse_stringified_list
 from .helpers import format_file_size
 from .helpers import format_file_size
@@ -32,6 +31,7 @@ from .item import ArchiveItem, ChunkListEntry
 from .crypto.key import PlaintextKey
 from .crypto.key import PlaintextKey
 from .crypto.file_integrity import IntegrityCheckedFile, DetachedIntegrityCheckedFile, FileIntegrityError
 from .crypto.file_integrity import IntegrityCheckedFile, DetachedIntegrityCheckedFile, FileIntegrityError
 from .locking import Lock
 from .locking import Lock
+from .manifest import Manifest
 from .platform import SaveFile
 from .platform import SaveFile
 from .remote import cache_if_remote
 from .remote import cache_if_remote
 from .repository import LIST_SCAN_LIMIT
 from .repository import LIST_SCAN_LIMIT

+ 2 - 2
src/borg/crypto/key.py

@@ -3,7 +3,7 @@ import os
 import textwrap
 import textwrap
 from binascii import a2b_base64, b2a_base64, hexlify
 from binascii import a2b_base64, b2a_base64, hexlify
 from hashlib import sha256, pbkdf2_hmac
 from hashlib import sha256, pbkdf2_hmac
-from typing import Literal, Callable, Sequence
+from typing import Literal, Callable
 
 
 from ..logger import create_logger
 from ..logger import create_logger
 
 
@@ -20,8 +20,8 @@ from ..helpers import get_limited_unpacker
 from ..helpers import bin_to_hex
 from ..helpers import bin_to_hex
 from ..helpers.passphrase import Passphrase, PasswordRetriesExceeded, PassphraseWrong
 from ..helpers.passphrase import Passphrase, PasswordRetriesExceeded, PassphraseWrong
 from ..helpers import msgpack
 from ..helpers import msgpack
-from ..helpers.manifest import Manifest
 from ..item import Key, EncryptedKey, want_bytes
 from ..item import Key, EncryptedKey, want_bytes
+from ..manifest import Manifest
 from ..platform import SaveFile
 from ..platform import SaveFile
 
 
 from .nonces import NonceManager
 from .nonces import NonceManager

+ 2 - 1
src/borg/crypto/keymanager.py

@@ -4,7 +4,8 @@ import textwrap
 from binascii import unhexlify, a2b_base64, b2a_base64
 from binascii import unhexlify, a2b_base64, b2a_base64
 from hashlib import sha256
 from hashlib import sha256
 
 
-from ..helpers import Manifest, NoManifestError, Error, yes, bin_to_hex, dash_open
+from ..helpers import Error, yes, bin_to_hex, dash_open
+from ..manifest import Manifest, NoManifestError
 from ..repository import Repository
 from ..repository import Repository
 
 
 from .key import CHPOKeyfileKey, RepoKeyNotFoundError, KeyBlobStorage, identify_key
 from .key import CHPOKeyfileKey, RepoKeyNotFoundError, KeyBlobStorage, identify_key

+ 1 - 1
src/borg/fuse.py

@@ -41,8 +41,8 @@ from .hashindex import FuseVersionsIndex
 from .helpers import daemonize, daemonizing, signal_handler, format_file_size
 from .helpers import daemonize, daemonizing, signal_handler, format_file_size
 from .helpers import HardLinkManager
 from .helpers import HardLinkManager
 from .helpers import msgpack
 from .helpers import msgpack
+from .helpers.lrucache import LRUCache
 from .item import Item
 from .item import Item
-from .lrucache import LRUCache
 from .platform import uid2user, gid2group
 from .platform import uid2user, gid2group
 from .remote import RemoteRepository
 from .remote import RemoteRepository
 
 

+ 1 - 2
src/borg/helpers/__init__.py

@@ -16,8 +16,7 @@ from .fs import dir_is_tagged, dir_is_cachedir, make_path_safe, scandir_inorder
 from .fs import secure_erase, safe_unlink, dash_open, os_open, os_stat, umount
 from .fs import secure_erase, safe_unlink, dash_open, os_open, os_stat, umount
 from .fs import O_, flags_root, flags_dir, flags_special_follow, flags_special, flags_base, flags_normal, flags_noatime
 from .fs import O_, flags_root, flags_dir, flags_special_follow, flags_special, flags_base, flags_normal, flags_noatime
 from .fs import HardLinkManager
 from .fs import HardLinkManager
-from .manifest import Manifest, NoManifestError, MandatoryFeatureUnsupported, AI_HUMAN_SORT_KEYS
-from .misc import sysinfo, log_multi, consume, get_tar_filter
+from .misc import sysinfo, log_multi, consume
 from .misc import ChunkIteratorFileWrapper, open_item, chunkit, iter_separated, ErrorIgnoringTextIOWrapper
 from .misc import ChunkIteratorFileWrapper, open_item, chunkit, iter_separated, ErrorIgnoringTextIOWrapper
 from .parseformat import bin_to_hex, safe_encode, safe_decode
 from .parseformat import bin_to_hex, safe_encode, safe_decode
 from .parseformat import remove_surrogates, eval_escapes, decode_dict, positive_int_validator, interval
 from .parseformat import remove_surrogates, eval_escapes, decode_dict, positive_int_validator, interval

+ 0 - 0
src/borg/lrucache.py → src/borg/helpers/lrucache.py


+ 0 - 18
src/borg/helpers/misc.py

@@ -189,21 +189,3 @@ def iter_separated(fd, sep=None, read_size=4096):
     # or if there was no data before EOF
     # or if there was no data before EOF
     if len(part) > 0:  # type: ignore[arg-type]
     if len(part) > 0:  # type: ignore[arg-type]
         yield part
         yield part
-
-
-def get_tar_filter(fname, decompress):
-    # Note that filter is None if fname is '-'.
-    if fname.endswith((".tar.gz", ".tgz")):
-        filter = "gzip -d" if decompress else "gzip"
-    elif fname.endswith((".tar.bz2", ".tbz")):
-        filter = "bzip2 -d" if decompress else "bzip2"
-    elif fname.endswith((".tar.xz", ".txz")):
-        filter = "xz -d" if decompress else "xz"
-    elif fname.endswith((".tar.lz4",)):
-        filter = "lz4 -d" if decompress else "lz4"
-    elif fname.endswith((".tar.zstd",)):
-        filter = "zstd -d" if decompress else "zstd"
-    else:
-        filter = None
-    logger.debug("Automatically determined tar filter: %s", filter)
-    return filter

+ 1 - 1
src/borg/nanorst.py → src/borg/helpers/nanorst.py

@@ -1,7 +1,7 @@
 import io
 import io
 import sys
 import sys
 
 
-from .helpers import is_terminal
+from . import is_terminal
 
 
 
 
 class TextPecker:
 class TextPecker:

+ 2 - 3
src/borg/helpers/parseformat.py

@@ -5,7 +5,6 @@ import os
 import os.path
 import os.path
 import re
 import re
 import shlex
 import shlex
-import socket
 import stat
 import stat
 import uuid
 import uuid
 from binascii import hexlify
 from binascii import hexlify
@@ -219,7 +218,7 @@ CommentSpec = replace_placeholders
 
 
 
 
 def SortBySpec(text):
 def SortBySpec(text):
-    from .manifest import AI_HUMAN_SORT_KEYS
+    from ..manifest import AI_HUMAN_SORT_KEYS
 
 
     for token in text.split(","):
     for token in text.split(","):
         if token not in AI_HUMAN_SORT_KEYS:
         if token not in AI_HUMAN_SORT_KEYS:
@@ -591,7 +590,7 @@ class ArchiveFormatter(BaseFormatter):
 
 
     @classmethod
     @classmethod
     def available_keys(cls):
     def available_keys(cls):
-        from .manifest import ArchiveInfo
+        from ..manifest import ArchiveInfo
 
 
         fake_archive_info = ArchiveInfo("archivename", b"\1" * 32, datetime(1970, 1, 1, tzinfo=timezone.utc))
         fake_archive_info = ArchiveInfo("archivename", b"\1" * 32, datetime(1970, 1, 1, tzinfo=timezone.utc))
         formatter = cls("", None, None, None)
         formatter = cls("", None, None, None)

+ 0 - 0
src/borg/shellpattern.py → src/borg/helpers/shellpattern.py


+ 11 - 12
src/borg/helpers/manifest.py → src/borg/manifest.py

@@ -7,17 +7,16 @@ from datetime import datetime, timedelta, timezone
 from operator import attrgetter
 from operator import attrgetter
 from typing import Sequence, FrozenSet
 from typing import Sequence, FrozenSet
 
 
-from .errors import Error
-
-from ..logger import create_logger
+from .logger import create_logger
 
 
 logger = create_logger()
 logger = create_logger()
 
 
-from .datastruct import StableDict
-from .parseformat import bin_to_hex
-from .time import parse_timestamp
-from .. import shellpattern
-from ..constants import *  # NOQA
+from .helpers import shellpattern
+from .constants import *  # NOQA
+from .helpers.datastruct import StableDict
+from .helpers.parseformat import bin_to_hex
+from .helpers.time import parse_timestamp
+from .helpers.errors import Error
 
 
 
 
 class NoManifestError(Error):
 class NoManifestError(Error):
@@ -184,9 +183,9 @@ class Manifest:
 
 
     @classmethod
     @classmethod
     def load(cls, repository, operations, key=None, force_tam_not_required=False):
     def load(cls, repository, operations, key=None, force_tam_not_required=False):
-        from ..item import ManifestItem
-        from ..crypto.key import key_factory, tam_required_file, tam_required
-        from ..repository import Repository
+        from .item import ManifestItem
+        from .crypto.key import key_factory, tam_required_file, tam_required
+        from .repository import Repository
 
 
         try:
         try:
             cdata = repository.get(cls.MANIFEST_ID)
             cdata = repository.get(cls.MANIFEST_ID)
@@ -248,7 +247,7 @@ class Manifest:
         return result
         return result
 
 
     def write(self):
     def write(self):
-        from ..item import ManifestItem
+        from .item import ManifestItem
 
 
         if self.key.tam_required:
         if self.key.tam_required:
             self.config["tam_required"] = True
             self.config["tam_required"] = True

+ 1 - 2
src/borg/patterns.py

@@ -7,8 +7,7 @@ import unicodedata
 from collections import namedtuple
 from collections import namedtuple
 from enum import Enum
 from enum import Enum
 
 
-from . import shellpattern
-from .helpers import clean_lines
+from .helpers import clean_lines, shellpattern
 from .helpers.errors import Error
 from .helpers.errors import Error
 
 
 
 

+ 3 - 3
src/borg/repository.py

@@ -5,7 +5,7 @@ import shutil
 import stat
 import stat
 import struct
 import struct
 import time
 import time
-from binascii import hexlify, unhexlify
+from binascii import unhexlify
 from collections import defaultdict
 from collections import defaultdict
 from configparser import ConfigParser
 from configparser import ConfigParser
 from datetime import datetime, timezone
 from datetime import datetime, timezone
@@ -19,11 +19,11 @@ from .helpers import Location
 from .helpers import ProgressIndicatorPercent
 from .helpers import ProgressIndicatorPercent
 from .helpers import bin_to_hex
 from .helpers import bin_to_hex
 from .helpers import secure_erase, safe_unlink
 from .helpers import secure_erase, safe_unlink
-from .helpers import Manifest
 from .helpers import msgpack
 from .helpers import msgpack
+from .helpers.lrucache import LRUCache
 from .locking import Lock, LockError, LockErrorT
 from .locking import Lock, LockError, LockErrorT
 from .logger import create_logger
 from .logger import create_logger
-from .lrucache import LRUCache
+from .manifest import Manifest
 from .platform import SaveFile, SyncFile, sync_dir, safe_fadvise
 from .platform import SaveFile, SyncFile, sync_dir, safe_fadvise
 from .checksums import crc32, StreamingXXH64
 from .checksums import crc32, StreamingXXH64
 from .crypto.file_integrity import IntegrityCheckedFile, FileIntegrityError
 from .crypto.file_integrity import IntegrityCheckedFile, FileIntegrityError

+ 1 - 1
src/borg/testsuite/archive.py

@@ -10,9 +10,9 @@ from . import BaseTestCase
 from ..crypto.key import PlaintextKey
 from ..crypto.key import PlaintextKey
 from ..archive import Archive, CacheChunkBuffer, RobustUnpacker, valid_msgpacked_dict, ITEM_KEYS, Statistics
 from ..archive import Archive, CacheChunkBuffer, RobustUnpacker, valid_msgpacked_dict, ITEM_KEYS, Statistics
 from ..archive import BackupOSError, backup_io, backup_io_iter, get_item_uid_gid
 from ..archive import BackupOSError, backup_io, backup_io_iter, get_item_uid_gid
-from ..helpers import Manifest
 from ..helpers import msgpack
 from ..helpers import msgpack
 from ..item import Item, ArchiveItem
 from ..item import Item, ArchiveItem
+from ..manifest import Manifest
 from ..platform import uid2user, gid2group
 from ..platform import uid2user, gid2group
 
 
 
 

+ 4 - 4
src/borg/testsuite/archiver.py

@@ -29,7 +29,7 @@ import borg.helpers.errors
 from .. import xattr, helpers, platform
 from .. import xattr, helpers, platform
 from ..archive import Archive, ChunkBuffer
 from ..archive import Archive, ChunkBuffer
 from ..archiver import Archiver, PURE_PYTHON_MSGPACK_WARNING
 from ..archiver import Archiver, PURE_PYTHON_MSGPACK_WARNING
-from ..archiver.common import build_filter, build_matcher
+from ..archiver.common import build_filter
 from ..cache import Cache, LocalCache
 from ..cache import Cache, LocalCache
 from ..chunker import has_seek_hole
 from ..chunker import has_seek_hole
 from ..constants import *  # NOQA
 from ..constants import *  # NOQA
@@ -37,15 +37,15 @@ from ..crypto.key import FlexiKey, AESOCBRepoKey, AESOCBKeyfileKey, CHPOKeyfileK
 from ..crypto.keymanager import RepoIdMismatch, NotABorgKeyFile
 from ..crypto.keymanager import RepoIdMismatch, NotABorgKeyFile
 from ..crypto.file_integrity import FileIntegrityError
 from ..crypto.file_integrity import FileIntegrityError
 from ..helpers import Location, get_security_dir
 from ..helpers import Location, get_security_dir
-from ..helpers import Manifest, MandatoryFeatureUnsupported
 from ..helpers import EXIT_SUCCESS, EXIT_WARNING, EXIT_ERROR
 from ..helpers import EXIT_SUCCESS, EXIT_WARNING, EXIT_ERROR
 from ..helpers import bin_to_hex
 from ..helpers import bin_to_hex
 from ..helpers import msgpack
 from ..helpers import msgpack
 from ..helpers import parse_storage_quota
 from ..helpers import parse_storage_quota
 from ..helpers import flags_noatime, flags_normal
 from ..helpers import flags_noatime, flags_normal
-from ..nanorst import RstToTextLazy, rst_to_terminal
+from ..helpers.nanorst import RstToTextLazy, rst_to_terminal
+from ..manifest import Manifest, MandatoryFeatureUnsupported
 from ..patterns import IECommand, PatternMatcher, parse_pattern
 from ..patterns import IECommand, PatternMatcher, parse_pattern
-from ..item import Item, ItemDiff, chunks_contents_equal
+from ..item import Item, chunks_contents_equal
 from ..locking import LockFailed
 from ..locking import LockFailed
 from ..logger import setup_logging
 from ..logger import setup_logging
 from ..remote import RemoteRepository, PathNotAllowed
 from ..remote import RemoteRepository, PathNotAllowed

+ 1 - 1
src/borg/testsuite/cache.py

@@ -12,7 +12,7 @@ from ..cache import AdHocCache
 from ..compress import CompressionSpec
 from ..compress import CompressionSpec
 from ..crypto.key import AESOCBRepoKey
 from ..crypto.key import AESOCBRepoKey
 from ..hashindex import ChunkIndex, CacheSynchronizer
 from ..hashindex import ChunkIndex, CacheSynchronizer
-from ..helpers import Manifest
+from ..manifest import Manifest
 from ..repository import Repository
 from ..repository import Repository
 
 
 
 

+ 1 - 1
src/borg/testsuite/lrucache.py

@@ -2,7 +2,7 @@ from tempfile import TemporaryFile
 
 
 import pytest
 import pytest
 
 
-from ..lrucache import LRUCache
+from ..helpers.lrucache import LRUCache
 
 
 
 
 class TestLRUCache:
 class TestLRUCache:

+ 1 - 1
src/borg/testsuite/nanorst.py

@@ -1,6 +1,6 @@
 import pytest
 import pytest
 
 
-from ..nanorst import rst_to_text
+from ..helpers.nanorst import rst_to_text
 
 
 
 
 def test_inline():
 def test_inline():

+ 1 - 1
src/borg/testsuite/shellpattern.py

@@ -2,7 +2,7 @@ import re
 
 
 import pytest
 import pytest
 
 
-from .. import shellpattern
+from ..helpers import shellpattern
 
 
 
 
 def check(path, pattern):
 def check(path, pattern):