Add configured repository "label" to the interpolated variables passed to command hooks (#874).

This commit is contained in:
Dan Helfman 2024-06-05 14:47:37 -07:00
parent b5ab1ff0cd
commit 177c958572
4 changed files with 43 additions and 3 deletions

2
NEWS
View file

@ -2,6 +2,8 @@
* #860: Fix interaction between environment variable interpolation in constants and shell escaping.
* #863: When color output is disabled (explicitly or implicitly), don't prefix each log line with
the log level.
* #874: Add configured repository "label" to the interpolated variables passed to before/after
command hooks.
1.8.11
* #815: Add optional Healthchecks auto-provisioning via "create_slug" option.

View file

@ -286,10 +286,11 @@ def run_actions(
global_arguments = arguments['global']
dry_run_label = ' (dry run; not making any changes)' if global_arguments.dry_run else ''
hook_context = {
'repository': repository_path,
'label': repository.get('label', ''),
'log_file': global_arguments.log_file if global_arguments.log_file else '',
# Deprecated: For backwards compatibility with borgmatic < 1.6.0.
'repositories': ','.join([repo['path'] for repo in config['repositories']]),
'log_file': global_arguments.log_file if global_arguments.log_file else '',
'repository': repository_path,
}
skip_actions = set(get_skip_actions(config, arguments))

View file

@ -79,6 +79,9 @@ variables you can use here:
* `configuration_filename`: borgmatic configuration filename in which the
hook was defined
* `label` <span class="minilink minilink-addedin">New in version
1.8.12</span>: label of the current repository as configured in the current
borgmatic configuration file
* `log_file`
<span class="minilink minilink-addedin">New in version 1.7.12</span>:
path of the borgmatic log file, only set when the `--log-file` flag is used

View file

@ -487,6 +487,40 @@ def test_run_actions_runs_rcreate():
)
def test_run_actions_adds_label_file_to_hook_context():
flexmock(module).should_receive('add_custom_log_levels')
flexmock(module).should_receive('get_skip_actions').and_return([])
flexmock(module.command).should_receive('execute_hook')
expected = flexmock()
flexmock(borgmatic.actions.create).should_receive('run_create').with_args(
config_filename=object,
repository={'path': 'repo', 'label': 'my repo'},
config={'repositories': []},
config_paths=[],
hook_context={'label': 'my repo', 'log_file': '', 'repositories': '', 'repository': 'repo'},
local_borg_version=object,
create_arguments=object,
global_arguments=object,
dry_run_label='',
local_path=object,
remote_path=object,
).once().and_return(expected)
result = tuple(
module.run_actions(
arguments={'global': flexmock(dry_run=False, log_file=None), 'create': flexmock()},
config_filename=flexmock(),
config={'repositories': []},
config_paths=[],
local_path=flexmock(),
remote_path=flexmock(),
local_borg_version=flexmock(),
repository={'path': 'repo', 'label': 'my repo'},
)
)
assert result == (expected,)
def test_run_actions_adds_log_file_to_hook_context():
flexmock(module).should_receive('add_custom_log_levels')
flexmock(module).should_receive('get_skip_actions').and_return([])
@ -497,7 +531,7 @@ def test_run_actions_adds_log_file_to_hook_context():
repository={'path': 'repo'},
config={'repositories': []},
config_paths=[],
hook_context={'repository': 'repo', 'repositories': '', 'log_file': 'foo'},
hook_context={'label': '', 'log_file': 'foo', 'repositories': '', 'repository': 'repo'},
local_borg_version=object,
create_arguments=object,
global_arguments=object,