add tests and minor fixes

This commit is contained in:
Vandal
2025-03-29 01:26:20 +05:30
parent 7020f0530a
commit 8b3a682edf
3 changed files with 243 additions and 53 deletions
+4 -11
View File
@@ -33,6 +33,8 @@ def recreate_archive(
exclude_flags = make_exclude_flags(config)
compression = config.get('compression', None)
chunker_params = config.get('chunker_params', None)
# Available recompress MODES: 'if-different' (default), 'always', 'never'
recompress = config.get('recompress', None)
# Write patterns to a temporary file and use that file with --patterns-from.
patterns_file = write_patterns_file(
@@ -42,11 +44,6 @@ def recreate_archive(
recreate_command = (
(local_path, 'recreate')
+ (('--remote-path', remote_path) if remote_path else ())
# + (
# ('--path', recreate_arguments.path)
# if recreate_arguments.path
# else ()
# )
+ (('--log-json',) if global_arguments.log_json else ())
+ (('--lock-wait', str(lock_wait)) if lock_wait is not None else ())
+ (('--info',) if logger.getEffectiveLevel() == logging.INFO else ())
@@ -62,11 +59,7 @@ def recreate_archive(
else ()
)
# Flag --target works only for a single archive
+ (
('--target', recreate_arguments.target)
if recreate_arguments.target and recreate_arguments.archive
else ()
)
+ (('--target', recreate_arguments.target) if recreate_arguments.target and archive else ())
+ (
('--comment', shlex.quote(recreate_arguments.comment))
if recreate_arguments.comment
@@ -84,7 +77,7 @@ def recreate_archive(
if recreate_arguments.match_archives
else ()
)
+ (('--recompress', recreate_arguments.recompress) if recreate_arguments.recompress else ())
+ (('--recompress', recompress) if recompress else ())
+ exclude_flags
+ (
flags.make_repository_archive_flags(repository, archive, local_borg_version)
-12
View File
@@ -1562,13 +1562,6 @@ def make_parsers():
'--archive',
help='Archive name, hash, or series to recreate',
)
# recreate_group.add_argument(
# '--path',
# metavar='PATH',
# dest='path',
# help='Path to recreate the repository/archive',
# required=True,
# )
recreate_group.add_argument(
'--list', dest='list', action='store_true', help='Show per-file details'
)
@@ -1595,11 +1588,6 @@ def make_parsers():
metavar='PATTERN',
help='Only consider archive names, hashes, or series matching this pattern',
)
recreate_group.add_argument(
'--recompress',
metavar='MODE',
help='Recompress data chunks according to MODE: [if-different (default), always, never]',
)
recreate_group.add_argument(
'-h', '--help', action='help', help='Show this help message and exit'
)
+239 -30
View File
@@ -1,4 +1,5 @@
import logging
import shlex
from flexmock import flexmock
@@ -34,10 +35,7 @@ def test_recreate_archive_dry_run_skips_execution():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
)
result = module.recreate_archive(
@@ -66,10 +64,7 @@ def test_recreate_calls_borg_with_required_flags():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
@@ -91,10 +86,7 @@ def test_recreate_with_remote_path():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
@@ -116,10 +108,7 @@ def test_recreate_with_lock_wait():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
@@ -142,10 +131,7 @@ def test_recreate_with_log_info():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
@@ -167,10 +153,7 @@ def test_recreate_with_log_debug():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
@@ -191,10 +174,7 @@ def test_recreate_with_log_json():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
),
global_arguments=flexmock(dry_run=False, log_json=True),
local_path='borg',
@@ -218,10 +198,7 @@ def test_recreate_with_list_filter_flags():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
@@ -246,10 +223,7 @@ def test_recreate_with_patterns_from_flag():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
@@ -271,13 +245,248 @@ def test_recreate_with_exclude_flags():
target=None,
comment=None,
timestamp=None,
compression=None,
chunker_params=None,
match_archives=None,
recompress=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_target_flag():
insert_execute_command_mock(('borg', 'recreate', '--target', 'new-archive', 'repo::archive'))
module.recreate_archive(
repository='repo',
archive='archive',
config={},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target='new-archive',
comment=None,
timestamp=None,
match_archives=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_comment_flag():
insert_execute_command_mock(
('borg', 'recreate', '--comment', shlex.quote('This is a test comment'), 'repo::archive')
)
module.recreate_archive(
repository='repo',
archive='archive',
config={},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target=None,
comment='This is a test comment',
timestamp=None,
match_archives=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_timestamp_flag():
insert_execute_command_mock(
('borg', 'recreate', '--timestamp', '2023-10-01T12:00:00', 'repo::archive')
)
module.recreate_archive(
repository='repo',
archive='archive',
config={},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target=None,
comment=None,
timestamp='2023-10-01T12:00:00',
match_archives=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_compression_flag():
insert_execute_command_mock(('borg', 'recreate', '--compression', 'lz4', 'repo::archive'))
module.recreate_archive(
repository='repo',
archive='archive',
config={'compression': 'lz4'},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target=None,
comment=None,
timestamp=None,
match_archives=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_chunker_params_flag():
insert_execute_command_mock(
('borg', 'recreate', '--chunker-params', '19,23,21,4095', 'repo::archive')
)
module.recreate_archive(
repository='repo',
archive='archive',
config={'chunker_params': '19,23,21,4095'},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target=None,
comment=None,
timestamp=None,
match_archives=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_recompress_flag():
insert_execute_command_mock(('borg', 'recreate', '--recompress', 'always', 'repo::archive'))
module.recreate_archive(
repository='repo',
archive='archive',
config={'recompress': 'always'},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target=None,
comment=None,
timestamp=None,
match_archives=None,
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_match_archives_star():
insert_execute_command_mock(('borg', 'recreate', 'repo::archive'))
module.recreate_archive(
repository='repo',
archive='archive',
config={},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target=None,
comment=None,
timestamp=None,
match_archives='*',
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_match_archives_regex():
insert_execute_command_mock(('borg', 'recreate', 'repo::archive'))
module.recreate_archive(
repository='repo',
archive='archive',
config={},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target=None,
comment=None,
timestamp=None,
match_archives='re:.*',
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_match_archives_shell():
insert_execute_command_mock(('borg', 'recreate', 'repo::archive'))
module.recreate_archive(
repository='repo',
archive='archive',
config={},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target=None,
comment=None,
timestamp=None,
match_archives='sh:*',
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_glob_archives_flag():
insert_execute_command_mock(('borg', 'recreate', '--glob-archives', 'foo-*', 'repo::archive'))
module.recreate_archive(
repository='repo',
archive='archive',
config={},
local_borg_version='1.2.3',
recreate_arguments=flexmock(
list=None,
target=None,
comment=None,
timestamp=None,
match_archives='foo-*',
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)
def test_recreate_with_match_archives_flag():
insert_execute_command_mock(
('borg', 'recreate', '--match-archives', 'sh:foo-*', '--repo', 'repo', 'archive')
)
module.recreate_archive(
repository='repo',
archive='archive',
config={},
local_borg_version='2.0.0b3',
recreate_arguments=flexmock(
list=None,
target=None,
comment=None,
timestamp=None,
match_archives='sh:foo-*',
),
global_arguments=flexmock(dry_run=False, log_json=False),
local_path='borg',
patterns=None,
)