borgmatic/borgmatic/commands/hook.py

38 lines
1.2 KiB
Python

import logging
from borgmatic import execute
from borgmatic.logger import get_logger
logger = get_logger(__name__)
def execute_hook(commands, config_filename, description, dry_run):
'''
Given a list of hook commands to execute, a config filename, a hook description, and whether
this is a dry run, run the given commands. Or, don't run them if this is a dry run.
'''
if not commands:
logger.debug('{}: No commands to run for {} hook'.format(config_filename, description))
return
dry_run_label = ' (dry run; not actually running hooks)' if dry_run else ''
if len(commands) == 1:
logger.info(
'{}: Running command for {} hook{}'.format(config_filename, description, dry_run_label)
)
else:
logger.info(
'{}: Running {} commands for {} hook{}'.format(
config_filename, len(commands), description, dry_run_label
)
)
for command in commands:
if not dry_run:
execute.execute_command(
[command],
output_log_level=logging.ERROR if description == 'on-error' else logging.WARNING,
shell=True,
)