parent
8cec7c74d8
commit
cdbe6cdf3a
3 changed files with 81 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import borgmatic.borg.prune
|
import borgmatic.borg.prune
|
||||||
|
import borgmatic.config.validate
|
||||||
import borgmatic.hooks.command
|
import borgmatic.hooks.command
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
@ -23,6 +24,11 @@ def run_prune(
|
||||||
'''
|
'''
|
||||||
Run the "prune" action for the given repository.
|
Run the "prune" action for the given repository.
|
||||||
'''
|
'''
|
||||||
|
if prune_arguments.repository and not borgmatic.config.validate.repositories_match(
|
||||||
|
repository, prune_arguments.repository
|
||||||
|
):
|
||||||
|
return
|
||||||
|
|
||||||
borgmatic.hooks.command.execute_hook(
|
borgmatic.hooks.command.execute_hook(
|
||||||
hooks.get('before_prune'),
|
hooks.get('before_prune'),
|
||||||
hooks.get('umask'),
|
hooks.get('umask'),
|
||||||
|
|
|
@ -333,6 +333,10 @@ def make_parsers():
|
||||||
add_help=False,
|
add_help=False,
|
||||||
)
|
)
|
||||||
prune_group = prune_parser.add_argument_group('prune arguments')
|
prune_group = prune_parser.add_argument_group('prune arguments')
|
||||||
|
prune_group.add_argument(
|
||||||
|
'--repository',
|
||||||
|
help='Path of specific existing repository to prune (must be already specified in a borgmatic configuration file)',
|
||||||
|
)
|
||||||
prune_group.add_argument(
|
prune_group.add_argument(
|
||||||
'--stats',
|
'--stats',
|
||||||
dest='stats',
|
dest='stats',
|
||||||
|
|
|
@ -7,7 +7,77 @@ def test_run_prune_calls_hooks():
|
||||||
flexmock(module.logger).answer = lambda message: None
|
flexmock(module.logger).answer = lambda message: None
|
||||||
flexmock(module.borgmatic.borg.prune).should_receive('prune_archives')
|
flexmock(module.borgmatic.borg.prune).should_receive('prune_archives')
|
||||||
flexmock(module.borgmatic.hooks.command).should_receive('execute_hook').times(2)
|
flexmock(module.borgmatic.hooks.command).should_receive('execute_hook').times(2)
|
||||||
prune_arguments = flexmock(stats=flexmock(), list_archives=flexmock())
|
prune_arguments = flexmock(repository=None, stats=flexmock(), list_archives=flexmock())
|
||||||
|
global_arguments = flexmock(monitoring_verbosity=1, dry_run=False)
|
||||||
|
|
||||||
|
module.run_prune(
|
||||||
|
config_filename='test.yaml',
|
||||||
|
repository='repo',
|
||||||
|
storage={},
|
||||||
|
retention={},
|
||||||
|
hooks={},
|
||||||
|
hook_context={},
|
||||||
|
local_borg_version=None,
|
||||||
|
prune_arguments=prune_arguments,
|
||||||
|
global_arguments=global_arguments,
|
||||||
|
dry_run_label='',
|
||||||
|
local_path=None,
|
||||||
|
remote_path=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_run_prune_runs_with_no_explicit_repository():
|
||||||
|
flexmock(module.logger).answer = lambda message: None
|
||||||
|
flexmock(module.borgmatic.borg.prune).should_receive('prune_archives')
|
||||||
|
prune_arguments = flexmock(repository=None, stats=flexmock(), list_archives=flexmock())
|
||||||
|
global_arguments = flexmock(monitoring_verbosity=1, dry_run=False)
|
||||||
|
|
||||||
|
module.run_prune(
|
||||||
|
config_filename='test.yaml',
|
||||||
|
repository='repo',
|
||||||
|
storage={},
|
||||||
|
retention={},
|
||||||
|
hooks={},
|
||||||
|
hook_context={},
|
||||||
|
local_borg_version=None,
|
||||||
|
prune_arguments=prune_arguments,
|
||||||
|
global_arguments=global_arguments,
|
||||||
|
dry_run_label='',
|
||||||
|
local_path=None,
|
||||||
|
remote_path=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_run_prune_runs_with_select_repository():
|
||||||
|
flexmock(module.logger).answer = lambda message: None
|
||||||
|
flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
|
||||||
|
flexmock(module.borgmatic.borg.prune).should_receive('prune_archives')
|
||||||
|
prune_arguments = flexmock(repository=flexmock(), stats=flexmock(), list_archives=flexmock())
|
||||||
|
global_arguments = flexmock(monitoring_verbosity=1, dry_run=False)
|
||||||
|
|
||||||
|
module.run_prune(
|
||||||
|
config_filename='test.yaml',
|
||||||
|
repository='repo',
|
||||||
|
storage={},
|
||||||
|
retention={},
|
||||||
|
hooks={},
|
||||||
|
hook_context={},
|
||||||
|
local_borg_version=None,
|
||||||
|
prune_arguments=prune_arguments,
|
||||||
|
global_arguments=global_arguments,
|
||||||
|
dry_run_label='',
|
||||||
|
local_path=None,
|
||||||
|
remote_path=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_run_prune_bails_if_repository_does_not_match():
|
||||||
|
flexmock(module.logger).answer = lambda message: None
|
||||||
|
flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(
|
||||||
|
False
|
||||||
|
)
|
||||||
|
flexmock(module.borgmatic.borg.prune).should_receive('prune_archives').never()
|
||||||
|
prune_arguments = flexmock(repository=flexmock(), stats=flexmock(), list_archives=flexmock())
|
||||||
global_arguments = flexmock(monitoring_verbosity=1, dry_run=False)
|
global_arguments = flexmock(monitoring_verbosity=1, dry_run=False)
|
||||||
|
|
||||||
module.run_prune(
|
module.run_prune(
|
||||||
|
|
Loading…
Reference in a new issue