Add a "--match-archives" flag to the "check" action (#779).
This commit is contained in:
parent
c5732aa4fc
commit
b47088067c
5 changed files with 175 additions and 43 deletions
2
NEWS
2
NEWS
|
@ -9,6 +9,8 @@
|
||||||
support empty sections without erroring.
|
support empty sections without erroring.
|
||||||
* #774: Disallow the "--dry-run" flag with the "borg" action, as borgmatic can't guarantee the Borg
|
* #774: Disallow the "--dry-run" flag with the "borg" action, as borgmatic can't guarantee the Borg
|
||||||
command won't have side effects.
|
command won't have side effects.
|
||||||
|
* #779: Add a "--match-archives" flag to the "check" action for selecting the archives to check,
|
||||||
|
overriding the existing "archive_name_format" and "match_archives" options in configuration.
|
||||||
|
|
||||||
1.8.3
|
1.8.3
|
||||||
* #665: BREAKING: Simplify logging logic as follows: Syslog verbosity is now disabled by
|
* #665: BREAKING: Simplify logging logic as follows: Syslog verbosity is now disabled by
|
||||||
|
|
|
@ -39,13 +39,10 @@ def run_check(
|
||||||
repository['path'],
|
repository['path'],
|
||||||
config,
|
config,
|
||||||
local_borg_version,
|
local_borg_version,
|
||||||
|
check_arguments,
|
||||||
global_arguments,
|
global_arguments,
|
||||||
local_path=local_path,
|
local_path=local_path,
|
||||||
remote_path=remote_path,
|
remote_path=remote_path,
|
||||||
progress=check_arguments.progress,
|
|
||||||
repair=check_arguments.repair,
|
|
||||||
only_checks=check_arguments.only,
|
|
||||||
force=check_arguments.force,
|
|
||||||
)
|
)
|
||||||
borgmatic.hooks.command.execute_hook(
|
borgmatic.hooks.command.execute_hook(
|
||||||
config.get('after_check'),
|
config.get('after_check'),
|
||||||
|
|
|
@ -149,11 +149,13 @@ def filter_checks_on_frequency(
|
||||||
return tuple(filtered_checks)
|
return tuple(filtered_checks)
|
||||||
|
|
||||||
|
|
||||||
def make_archive_filter_flags(local_borg_version, config, checks, check_last=None, prefix=None):
|
def make_archive_filter_flags(
|
||||||
|
local_borg_version, config, checks, check_arguments, check_last=None, prefix=None
|
||||||
|
):
|
||||||
'''
|
'''
|
||||||
Given the local Borg version, a configuration dict, a parsed sequence of checks, the check last
|
Given the local Borg version, a configuration dict, a parsed sequence of checks, check arguments
|
||||||
value, and a consistency check prefix, transform the checks into tuple of command-line flags for
|
as an argparse.Namespace instance, the check last value, and a consistency check prefix,
|
||||||
filtering archives in a check command.
|
transform the checks into tuple of command-line flags for filtering archives in a check command.
|
||||||
|
|
||||||
If a check_last value is given and "archives" is in checks, then include a "--last" flag. And if
|
If a check_last value is given and "archives" is in checks, then include a "--last" flag. And if
|
||||||
a prefix value is given and "archives" is in checks, then include a "--match-archives" flag.
|
a prefix value is given and "archives" is in checks, then include a "--match-archives" flag.
|
||||||
|
@ -168,7 +170,7 @@ def make_archive_filter_flags(local_borg_version, config, checks, check_last=Non
|
||||||
if prefix
|
if prefix
|
||||||
else (
|
else (
|
||||||
flags.make_match_archives_flags(
|
flags.make_match_archives_flags(
|
||||||
config.get('match_archives'),
|
check_arguments.match_archives or config.get('match_archives'),
|
||||||
config.get('archive_name_format'),
|
config.get('archive_name_format'),
|
||||||
local_borg_version,
|
local_borg_version,
|
||||||
)
|
)
|
||||||
|
@ -353,18 +355,15 @@ def check_archives(
|
||||||
repository_path,
|
repository_path,
|
||||||
config,
|
config,
|
||||||
local_borg_version,
|
local_borg_version,
|
||||||
|
check_arguments,
|
||||||
global_arguments,
|
global_arguments,
|
||||||
local_path='borg',
|
local_path='borg',
|
||||||
remote_path=None,
|
remote_path=None,
|
||||||
progress=None,
|
|
||||||
repair=None,
|
|
||||||
only_checks=None,
|
|
||||||
force=None,
|
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Given a local or remote repository path, a configuration dict, local/remote commands to run,
|
Given a local or remote repository path, a configuration dict, the local Borg version, check
|
||||||
whether to include progress information, whether to attempt a repair, and an optional list of
|
arguments as an argparse.Namespace instance, global arguments, and local/remote commands to run,
|
||||||
checks to use instead of configured checks, check the contained Borg archives for consistency.
|
check the contained Borg archives for consistency.
|
||||||
|
|
||||||
If there are no consistency checks to run, skip running them.
|
If there are no consistency checks to run, skip running them.
|
||||||
|
|
||||||
|
@ -389,11 +388,11 @@ def check_archives(
|
||||||
|
|
||||||
check_last = config.get('check_last', None)
|
check_last = config.get('check_last', None)
|
||||||
prefix = config.get('prefix')
|
prefix = config.get('prefix')
|
||||||
configured_checks = parse_checks(config, only_checks)
|
configured_checks = parse_checks(config, check_arguments.only_checks)
|
||||||
lock_wait = None
|
lock_wait = None
|
||||||
extra_borg_options = config.get('extra_borg_options', {}).get('check', '')
|
extra_borg_options = config.get('extra_borg_options', {}).get('check', '')
|
||||||
archive_filter_flags = make_archive_filter_flags(
|
archive_filter_flags = make_archive_filter_flags(
|
||||||
local_borg_version, config, configured_checks, check_last, prefix
|
local_borg_version, config, configured_checks, check_arguments, check_last, prefix
|
||||||
)
|
)
|
||||||
archives_check_id = make_archives_check_id(archive_filter_flags)
|
archives_check_id = make_archives_check_id(archive_filter_flags)
|
||||||
|
|
||||||
|
@ -401,7 +400,7 @@ def check_archives(
|
||||||
config,
|
config,
|
||||||
borg_repository_id,
|
borg_repository_id,
|
||||||
configured_checks,
|
configured_checks,
|
||||||
force,
|
check_arguments.force,
|
||||||
archives_check_id,
|
archives_check_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -416,13 +415,13 @@ def check_archives(
|
||||||
|
|
||||||
full_command = (
|
full_command = (
|
||||||
(local_path, 'check')
|
(local_path, 'check')
|
||||||
+ (('--repair',) if repair else ())
|
+ (('--repair',) if check_arguments.repair else ())
|
||||||
+ make_check_flags(checks, archive_filter_flags)
|
+ make_check_flags(checks, archive_filter_flags)
|
||||||
+ (('--remote-path', remote_path) if remote_path else ())
|
+ (('--remote-path', remote_path) if remote_path else ())
|
||||||
+ (('--log-json',) if global_arguments.log_json else ())
|
+ (('--log-json',) if global_arguments.log_json else ())
|
||||||
+ (('--lock-wait', str(lock_wait)) if lock_wait else ())
|
+ (('--lock-wait', str(lock_wait)) if lock_wait else ())
|
||||||
+ verbosity_flags
|
+ verbosity_flags
|
||||||
+ (('--progress',) if progress else ())
|
+ (('--progress',) if check_arguments.progress else ())
|
||||||
+ (tuple(extra_borg_options.split(' ')) if extra_borg_options else ())
|
+ (tuple(extra_borg_options.split(' ')) if extra_borg_options else ())
|
||||||
+ flags.make_repository_flags(repository_path, local_borg_version)
|
+ flags.make_repository_flags(repository_path, local_borg_version)
|
||||||
)
|
)
|
||||||
|
@ -431,7 +430,7 @@ def check_archives(
|
||||||
|
|
||||||
# The Borg repair option triggers an interactive prompt, which won't work when output is
|
# The Borg repair option triggers an interactive prompt, which won't work when output is
|
||||||
# captured. And progress messes with the terminal directly.
|
# captured. And progress messes with the terminal directly.
|
||||||
if repair or progress:
|
if check_arguments.repair or check_arguments.progress:
|
||||||
execute_command(
|
execute_command(
|
||||||
full_command, output_file=DO_NOT_CAPTURE, extra_environment=borg_environment
|
full_command, output_file=DO_NOT_CAPTURE, extra_environment=borg_environment
|
||||||
)
|
)
|
||||||
|
|
|
@ -604,11 +604,18 @@ def make_parsers():
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help='Attempt to repair any inconsistencies found (for interactive use)',
|
help='Attempt to repair any inconsistencies found (for interactive use)',
|
||||||
)
|
)
|
||||||
|
check_group.add_argument(
|
||||||
|
'-a',
|
||||||
|
'--match-archives',
|
||||||
|
'--glob-archives',
|
||||||
|
metavar='PATTERN',
|
||||||
|
help='Only check archives with names matching this pattern',
|
||||||
|
)
|
||||||
check_group.add_argument(
|
check_group.add_argument(
|
||||||
'--only',
|
'--only',
|
||||||
metavar='CHECK',
|
metavar='CHECK',
|
||||||
choices=('repository', 'archives', 'data', 'extract'),
|
choices=('repository', 'archives', 'data', 'extract'),
|
||||||
dest='only',
|
dest='only_checks',
|
||||||
action='append',
|
action='append',
|
||||||
help='Run a particular consistency check (repository, archives, data, or extract) instead of configured checks (subject to configured frequency, can specify flag multiple times)',
|
help='Run a particular consistency check (repository, archives, data, or extract) instead of configured checks (subject to configured frequency, can specify flag multiple times)',
|
||||||
)
|
)
|
||||||
|
|
|
@ -201,6 +201,7 @@ def test_make_archive_filter_flags_with_default_checks_and_prefix_returns_defaul
|
||||||
'1.2.3',
|
'1.2.3',
|
||||||
{},
|
{},
|
||||||
('repository', 'archives'),
|
('repository', 'archives'),
|
||||||
|
check_arguments=flexmock(match_archives=None),
|
||||||
prefix='foo',
|
prefix='foo',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -215,6 +216,7 @@ def test_make_archive_filter_flags_with_all_checks_and_prefix_returns_default_fl
|
||||||
'1.2.3',
|
'1.2.3',
|
||||||
{},
|
{},
|
||||||
('repository', 'archives', 'extract'),
|
('repository', 'archives', 'extract'),
|
||||||
|
check_arguments=flexmock(match_archives=None),
|
||||||
prefix='foo',
|
prefix='foo',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -229,6 +231,7 @@ def test_make_archive_filter_flags_with_all_checks_and_prefix_without_borg_featu
|
||||||
'1.2.3',
|
'1.2.3',
|
||||||
{},
|
{},
|
||||||
('repository', 'archives', 'extract'),
|
('repository', 'archives', 'extract'),
|
||||||
|
check_arguments=flexmock(match_archives=None),
|
||||||
prefix='foo',
|
prefix='foo',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -239,7 +242,9 @@ def test_make_archive_filter_flags_with_archives_check_and_last_includes_last_fl
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags('1.2.3', {}, ('archives',), check_last=3)
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3', {}, ('archives',), check_arguments=flexmock(match_archives=None), check_last=3
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ('--last', '3')
|
assert flags == ('--last', '3')
|
||||||
|
|
||||||
|
@ -248,7 +253,9 @@ def test_make_archive_filter_flags_with_data_check_and_last_includes_last_flag()
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags('1.2.3', {}, ('data',), check_last=3)
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3', {}, ('data',), check_arguments=flexmock(match_archives=None), check_last=3
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ('--last', '3')
|
assert flags == ('--last', '3')
|
||||||
|
|
||||||
|
@ -257,7 +264,9 @@ def test_make_archive_filter_flags_with_repository_check_and_last_omits_last_fla
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags('1.2.3', {}, ('repository',), check_last=3)
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3', {}, ('repository',), check_arguments=flexmock(match_archives=None), check_last=3
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ()
|
assert flags == ()
|
||||||
|
|
||||||
|
@ -266,7 +275,13 @@ def test_make_archive_filter_flags_with_default_checks_and_last_includes_last_fl
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags('1.2.3', {}, ('repository', 'archives'), check_last=3)
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3',
|
||||||
|
{},
|
||||||
|
('repository', 'archives'),
|
||||||
|
check_arguments=flexmock(match_archives=None),
|
||||||
|
check_last=3,
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ('--last', '3')
|
assert flags == ('--last', '3')
|
||||||
|
|
||||||
|
@ -275,7 +290,9 @@ def test_make_archive_filter_flags_with_archives_check_and_prefix_includes_match
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags('1.2.3', {}, ('archives',), prefix='foo-')
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3', {}, ('archives',), check_arguments=flexmock(match_archives=None), prefix='foo-'
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ('--match-archives', 'sh:foo-*')
|
assert flags == ('--match-archives', 'sh:foo-*')
|
||||||
|
|
||||||
|
@ -284,11 +301,30 @@ def test_make_archive_filter_flags_with_data_check_and_prefix_includes_match_arc
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags('1.2.3', {}, ('data',), prefix='foo-')
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3', {}, ('data',), check_arguments=flexmock(match_archives=None), prefix='foo-'
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ('--match-archives', 'sh:foo-*')
|
assert flags == ('--match-archives', 'sh:foo-*')
|
||||||
|
|
||||||
|
|
||||||
|
def test_make_archive_filter_flags_prefers_check_arguments_match_archives_to_config_match_archives():
|
||||||
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
|
flexmock(module.flags).should_receive('make_match_archives_flags').with_args(
|
||||||
|
'baz-*', None, '1.2.3'
|
||||||
|
).and_return(('--match-archives', 'sh:baz-*'))
|
||||||
|
|
||||||
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3',
|
||||||
|
{'match_archives': 'bar-{now}'}, # noqa: FS003
|
||||||
|
('archives',),
|
||||||
|
check_arguments=flexmock(match_archives='baz-*'),
|
||||||
|
prefix='',
|
||||||
|
)
|
||||||
|
|
||||||
|
assert flags == ('--match-archives', 'sh:baz-*')
|
||||||
|
|
||||||
|
|
||||||
def test_make_archive_filter_flags_with_archives_check_and_empty_prefix_uses_archive_name_format_instead():
|
def test_make_archive_filter_flags_with_archives_check_and_empty_prefix_uses_archive_name_format_instead():
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').with_args(
|
flexmock(module.flags).should_receive('make_match_archives_flags').with_args(
|
||||||
|
@ -296,7 +332,11 @@ def test_make_archive_filter_flags_with_archives_check_and_empty_prefix_uses_arc
|
||||||
).and_return(('--match-archives', 'sh:bar-*'))
|
).and_return(('--match-archives', 'sh:bar-*'))
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags(
|
flags = module.make_archive_filter_flags(
|
||||||
'1.2.3', {'archive_name_format': 'bar-{now}'}, ('archives',), prefix='' # noqa: FS003
|
'1.2.3',
|
||||||
|
{'archive_name_format': 'bar-{now}'}, # noqa: FS003
|
||||||
|
('archives',),
|
||||||
|
check_arguments=flexmock(match_archives=None),
|
||||||
|
prefix='',
|
||||||
)
|
)
|
||||||
|
|
||||||
assert flags == ('--match-archives', 'sh:bar-*')
|
assert flags == ('--match-archives', 'sh:bar-*')
|
||||||
|
@ -306,7 +346,9 @@ def test_make_archive_filter_flags_with_archives_check_and_none_prefix_omits_mat
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags('1.2.3', {}, ('archives',), prefix=None)
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3', {}, ('archives',), check_arguments=flexmock(match_archives=None), prefix=None
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ()
|
assert flags == ()
|
||||||
|
|
||||||
|
@ -315,7 +357,9 @@ def test_make_archive_filter_flags_with_repository_check_and_prefix_omits_match_
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags('1.2.3', {}, ('repository',), prefix='foo-')
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3', {}, ('repository',), check_arguments=flexmock(match_archives=None), prefix='foo-'
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ()
|
assert flags == ()
|
||||||
|
|
||||||
|
@ -324,7 +368,13 @@ def test_make_archive_filter_flags_with_default_checks_and_prefix_includes_match
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_archive_filter_flags('1.2.3', {}, ('repository', 'archives'), prefix='foo-')
|
flags = module.make_archive_filter_flags(
|
||||||
|
'1.2.3',
|
||||||
|
{},
|
||||||
|
('repository', 'archives'),
|
||||||
|
check_arguments=flexmock(match_archives=None),
|
||||||
|
prefix='foo-',
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ('--match-archives', 'sh:foo-*')
|
assert flags == ('--match-archives', 'sh:foo-*')
|
||||||
|
|
||||||
|
@ -607,7 +657,7 @@ def test_upgrade_check_times_renames_stale_temporary_check_path():
|
||||||
module.upgrade_check_times(flexmock(), flexmock())
|
module.upgrade_check_times(flexmock(), flexmock())
|
||||||
|
|
||||||
|
|
||||||
def test_check_archives_with_progress_calls_borg_with_progress_parameter():
|
def test_check_archives_with_progress_passes_through_to_borg():
|
||||||
checks = ('repository',)
|
checks = ('repository',)
|
||||||
config = {'check_last': None}
|
config = {'check_last': None}
|
||||||
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
||||||
|
@ -634,12 +684,14 @@ def test_check_archives_with_progress_calls_borg_with_progress_parameter():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=True, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
progress=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_check_archives_with_repair_calls_borg_with_repair_parameter():
|
def test_check_archives_with_repair_passes_through_to_borg():
|
||||||
checks = ('repository',)
|
checks = ('repository',)
|
||||||
config = {'check_last': None}
|
config = {'check_last': None}
|
||||||
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
||||||
|
@ -666,8 +718,10 @@ def test_check_archives_with_repair_calls_borg_with_repair_parameter():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=True, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
repair=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -701,6 +755,9 @@ def test_check_archives_calls_borg_with_parameters(checks):
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -723,6 +780,9 @@ def test_check_archives_with_json_error_raises():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -743,6 +803,9 @@ def test_check_archives_with_missing_json_keys_raises():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -769,11 +832,14 @@ def test_check_archives_with_extract_check_calls_extract_only():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_check_archives_with_log_info_calls_borg_with_info_parameter():
|
def test_check_archives_with_log_info_passes_through_to_borg():
|
||||||
checks = ('repository',)
|
checks = ('repository',)
|
||||||
config = {'check_last': None}
|
config = {'check_last': None}
|
||||||
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
||||||
|
@ -795,11 +861,14 @@ def test_check_archives_with_log_info_calls_borg_with_info_parameter():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_check_archives_with_log_debug_calls_borg_with_debug_parameter():
|
def test_check_archives_with_log_debug_passes_through_to_borg():
|
||||||
checks = ('repository',)
|
checks = ('repository',)
|
||||||
config = {'check_last': None}
|
config = {'check_last': None}
|
||||||
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
||||||
|
@ -821,6 +890,9 @@ def test_check_archives_with_log_debug_calls_borg_with_debug_parameter():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -841,6 +913,9 @@ def test_check_archives_without_any_checks_bails():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -867,12 +942,15 @@ def test_check_archives_with_local_path_calls_borg_via_local_path():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
local_path='borg1',
|
local_path='borg1',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_check_archives_with_remote_path_calls_borg_with_remote_path_parameters():
|
def test_check_archives_with_remote_path_passes_through_to_borg():
|
||||||
checks = ('repository',)
|
checks = ('repository',)
|
||||||
check_last = flexmock()
|
check_last = flexmock()
|
||||||
config = {'check_last': check_last}
|
config = {'check_last': check_last}
|
||||||
|
@ -894,12 +972,15 @@ def test_check_archives_with_remote_path_calls_borg_with_remote_path_parameters(
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
remote_path='borg1',
|
remote_path='borg1',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_check_archives_with_log_json_calls_borg_with_log_json_parameters():
|
def test_check_archives_with_log_json_passes_through_to_borg():
|
||||||
checks = ('repository',)
|
checks = ('repository',)
|
||||||
check_last = flexmock()
|
check_last = flexmock()
|
||||||
config = {'check_last': check_last}
|
config = {'check_last': check_last}
|
||||||
|
@ -921,11 +1002,14 @@ def test_check_archives_with_log_json_calls_borg_with_log_json_parameters():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=True),
|
global_arguments=flexmock(log_json=True),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_check_archives_with_lock_wait_calls_borg_with_lock_wait_parameters():
|
def test_check_archives_with_lock_wait_passes_through_to_borg():
|
||||||
checks = ('repository',)
|
checks = ('repository',)
|
||||||
check_last = flexmock()
|
check_last = flexmock()
|
||||||
config = {'lock_wait': 5, 'check_last': check_last}
|
config = {'lock_wait': 5, 'check_last': check_last}
|
||||||
|
@ -947,6 +1031,9 @@ def test_check_archives_with_lock_wait_calls_borg_with_lock_wait_parameters():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -974,11 +1061,14 @@ def test_check_archives_with_retention_prefix():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_check_archives_with_extra_borg_options_calls_borg_with_extra_options():
|
def test_check_archives_with_extra_borg_options_passes_through_to_borg():
|
||||||
checks = ('repository',)
|
checks = ('repository',)
|
||||||
config = {'check_last': None, 'extra_borg_options': {'check': '--extra --options'}}
|
config = {'check_last': None, 'extra_borg_options': {'check': '--extra --options'}}
|
||||||
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
||||||
|
@ -999,5 +1089,42 @@ def test_check_archives_with_extra_borg_options_calls_borg_with_extra_options():
|
||||||
repository_path='repo',
|
repository_path='repo',
|
||||||
config=config,
|
config=config,
|
||||||
local_borg_version='1.2.3',
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives=None
|
||||||
|
),
|
||||||
|
global_arguments=flexmock(log_json=False),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_check_archives_with_match_archives_passes_through_to_borg():
|
||||||
|
checks = ('archives',)
|
||||||
|
config = {'check_last': None}
|
||||||
|
flexmock(module.rinfo).should_receive('display_repository_info').and_return(
|
||||||
|
'{"repository": {"id": "repo"}}'
|
||||||
|
)
|
||||||
|
flexmock(module).should_receive('upgrade_check_times')
|
||||||
|
flexmock(module).should_receive('parse_checks')
|
||||||
|
flexmock(module).should_receive('make_archive_filter_flags').and_return(
|
||||||
|
('--match-archives', 'foo-*')
|
||||||
|
)
|
||||||
|
flexmock(module).should_receive('make_archives_check_id').and_return(None)
|
||||||
|
flexmock(module).should_receive('filter_checks_on_frequency').and_return(checks)
|
||||||
|
flexmock(module).should_receive('make_check_flags').and_return(('--match-archives', 'foo-*'))
|
||||||
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||||
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
|
('borg', 'check', '--match-archives', 'foo-*', 'repo'),
|
||||||
|
extra_environment=None,
|
||||||
|
).once()
|
||||||
|
flexmock(module).should_receive('make_check_time_path')
|
||||||
|
flexmock(module).should_receive('write_check_time')
|
||||||
|
|
||||||
|
module.check_archives(
|
||||||
|
repository_path='repo',
|
||||||
|
config=config,
|
||||||
|
local_borg_version='1.2.3',
|
||||||
|
check_arguments=flexmock(
|
||||||
|
progress=None, repair=None, only_checks=None, force=None, match_archives='foo-*'
|
||||||
|
),
|
||||||
global_arguments=flexmock(log_json=False),
|
global_arguments=flexmock(log_json=False),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue