add borg recreate

This commit is contained in:
Vandal
2025-03-17 22:24:53 +05:30
parent 901e668c76
commit 6adb0fd44c
2 changed files with 82 additions and 0 deletions
View File
+82
View File
@@ -0,0 +1,82 @@
import argparse
import logging
import borgmatic.borg.environment
import borgmatic.borg.feature
import borgmatic.borg.flags
import borgmatic.borg.repo_delete
import borgmatic.config.paths
import borgmatic.execute
from borgmatic.borg.create import make_exclude_flags, write_patterns_file
logger = logging.getLogger(__name__)
def make_recreate_command(
repository,
config,
patterns,
local_borg_version,
recreate_arguments,
global_arguments,
local_path,
remote_path=None,
):
'''
Given a repository path, configuration dict, patterns, and Borg options, return a command
list for recreating a Borg archive.
'''
verbosity_flags = ()
if logger.isEnabledFor(logging.DEBUG):
verbosity_flags = ('--debug', '--show-rc')
elif logger.isEnabledFor(logging.INFO):
verbosity_flags = ('--info',)
command = [local_path, 'recreate', repository]
command.extend(verbosity_flags)
command.extend(global_arguments)
command.extend(recreate_arguments)
exclude_flags = make_exclude_flags(config)
command.extend(exclude_flags)
return command
def recreate_archive(
repository,
config,
patterns,
local_borg_version,
recreate_arguments,
global_arguments,
local_path='borg',
remote_path=None,
):
'''
Recreate a Borg archive with the given repository and configuration.
'''
command = make_recreate_command(
repository,
config,
patterns,
local_borg_version,
recreate_arguments,
global_arguments,
local_path,
remote_path,
)
patterns_file = write_patterns_file(patterns, borgmatic.config.paths.get_runtime_directory())
if patterns_file:
command.extend(['--patterns-from', patterns_file.name])
borgmatic.execute.execute_command(
command,
output_log_level=logging.ANSWER,
environment=borgmatic.borg.environment.make_environment(config),
working_directory=borgmatic.config.paths.get_working_directory(config),
remote_path=remote_path,
borg_local_path=local_path,
borg_exit_codes=config.get('borg_exit_codes')
)