edit schema comments and work on witten review

This commit is contained in:
Divyansh Singh 2023-06-05 20:05:10 +05:30
parent bb60b25399
commit 206a9c9607
4 changed files with 22 additions and 25 deletions

View file

@ -14,14 +14,14 @@ logger = logging.getLogger(__name__)
def get_config_paths(bootstrap_arguments, global_arguments, local_borg_version): def get_config_paths(bootstrap_arguments, global_arguments, local_borg_version):
borgmatic_source_directory = bootstrap_arguments.borgmatic_source_directory or DEFAULT_BORGMATIC_SOURCE_DIRECTORY borgmatic_source_directory = bootstrap_arguments.borgmatic_source_directory or DEFAULT_BORGMATIC_SOURCE_DIRECTORY
borgmatic_manifest_path = os.path.expanduser( borgmatic_manifest_path = os.path.expanduser(
os.path.join(borgmatic_source_directory, 'bootstrap', 'configs-list.json') os.path.join(borgmatic_source_directory, 'bootstrap', 'manifest.json')
) )
extract_process = borgmatic.borg.extract.extract_archive( extract_process = borgmatic.borg.extract.extract_archive(
global_arguments.dry_run, global_arguments.dry_run,
bootstrap_arguments.repository, bootstrap_arguments.repository,
borgmatic.borg.rlist.resolve_archive_name( borgmatic.borg.rlist.resolve_archive_name(
bootstrap_arguments.repository, bootstrap_arguments.repository,
bootstrap_arguments.archive or 'latest', bootstrap_arguments.archive,
{}, {},
local_borg_version, local_borg_version,
global_arguments global_arguments
@ -34,11 +34,7 @@ def get_config_paths(bootstrap_arguments, global_arguments, local_borg_version):
extract_to_stdout=True, extract_to_stdout=True,
) )
try:
manifest_data = json.loads(extract_process.stdout.read()) manifest_data = json.loads(extract_process.stdout.read())
except json.decoder.JSONDecodeError as error:
logger.error('Error parsing manifest data: %s', error)
raise
return manifest_data['config_paths'] return manifest_data['config_paths']
@ -59,7 +55,7 @@ def run_bootstrap(bootstrap_arguments, global_arguments, local_borg_version):
bootstrap_arguments.repository, bootstrap_arguments.repository,
borgmatic.borg.rlist.resolve_archive_name( borgmatic.borg.rlist.resolve_archive_name(
bootstrap_arguments.repository, bootstrap_arguments.repository,
bootstrap_arguments.archive or 'latest', bootstrap_arguments.archive,
{}, {},
local_borg_version, local_borg_version,
global_arguments global_arguments
@ -70,7 +66,7 @@ def run_bootstrap(bootstrap_arguments, global_arguments, local_borg_version):
local_borg_version, local_borg_version,
global_arguments, global_arguments,
extract_to_stdout=False, extract_to_stdout=False,
destination_path=bootstrap_arguments.destination or '/', destination_path=bootstrap_arguments.destination,
strip_components=bootstrap_arguments.strip_components, strip_components=bootstrap_arguments.strip_components,
progress=bootstrap_arguments.progress, progress=bootstrap_arguments.progress,
) )

View file

@ -30,7 +30,7 @@ def create_borgmatic_manifest(location, config_paths, dry_run):
) )
borgmatic_manifest_path = os.path.expanduser( borgmatic_manifest_path = os.path.expanduser(
os.path.join(borgmatic_source_directory, 'bootstrap', 'configs-list.json') os.path.join(borgmatic_source_directory, 'bootstrap', 'manifest.json')
) )
if not os.path.exists(borgmatic_manifest_path): if not os.path.exists(borgmatic_manifest_path):

View file

@ -74,15 +74,15 @@ def parse_subparser_arguments(unparsed_arguments, subparsers):
if item in subparsers: if item in subparsers:
remaining_arguments.remove(item) remaining_arguments.remove(item)
try:
arguments[canonical_name] = None if canonical_name in subcommand_parsers_mapping else parsed arguments[canonical_name] = None if canonical_name in subcommand_parsers_mapping else parsed
except UnboundLocalError:
pass
for argument in arguments: for argument in arguments:
if not arguments[argument]: if not arguments[argument]:
if not any(subcommand in arguments for subcommand in subcommand_parsers_mapping[argument]): if not any(subcommand in arguments for subcommand in subcommand_parsers_mapping[argument]):
raise ValueError("Missing subcommand for {}. Expected one of {}".format( raise ValueError(f"Missing subcommand for {argument}. Expected one of {subcommand_parsers_mapping[argument]}")
argument, subcommand_parsers_mapping[argument]
))
# If no actions are explicitly requested, assume defaults. # If no actions are explicitly requested, assume defaults.
if not arguments and '--help' not in unparsed_arguments and '-h' not in unparsed_arguments: if not arguments and '--help' not in unparsed_arguments and '-h' not in unparsed_arguments:
@ -564,28 +564,29 @@ def make_parsers():
config_bootstrap_parser = config_subparsers.add_parser( config_bootstrap_parser = config_subparsers.add_parser(
'bootstrap', 'bootstrap',
aliases=SUBPARSER_ALIASES['config_bootstrap'], aliases=SUBPARSER_ALIASES['config_bootstrap'],
help='Extract files from a borgmatic created repository to the current directory', help='Extract the config files used to create a borgmatic repository',
description='Extract a named archive from a borgmatic created repository to the current directory without a configuration file', description='Extract just the config files that were used to create a borgmatic repository during the "create" operation',
add_help=False, add_help=False,
) )
config_bootstrap_group = config_bootstrap_parser.add_argument_group('config bootstrap arguments') config_bootstrap_group = config_bootstrap_parser.add_argument_group('config bootstrap arguments')
config_bootstrap_group.add_argument( config_bootstrap_group.add_argument(
'--repository', '--repository',
help='Path of repository to extract', help='Path of repository to extract config files from',
required=True, required=True,
) )
config_bootstrap_group.add_argument( config_bootstrap_group.add_argument(
'--borgmatic-source-directory', '--borgmatic-source-directory',
help='Path of the borgmatic source directory if other than the default', help='Path that stores the config files used to create an archive, and additional source files used for temporary internal state like borgmatic database dumps. Defaults to ~/.borgmatic',
) )
config_bootstrap_group.add_argument( config_bootstrap_group.add_argument(
'--archive', help='Name of archive to extract, defaults to "latest"' '--archive', help='Name of archive to extract config files from, defaults to "latest"', default='latest'
) )
config_bootstrap_group.add_argument( config_bootstrap_group.add_argument(
'--destination', '--destination',
metavar='PATH', metavar='PATH',
dest='destination', dest='destination',
help='Directory to extract files into, defaults to /', help='Directory to extract config files into, defaults to /',
default='/',
) )
config_bootstrap_group.add_argument( config_bootstrap_group.add_argument(
'--strip-components', '--strip-components',

View file

@ -21,7 +21,7 @@ import borgmatic.actions.compact
import borgmatic.actions.create import borgmatic.actions.create
import borgmatic.actions.export_tar import borgmatic.actions.export_tar
import borgmatic.actions.extract import borgmatic.actions.extract
import borgmatic.actions.bootstrap import borgmatic.actions.config.bootstrap
import borgmatic.actions.info import borgmatic.actions.info
import borgmatic.actions.list import borgmatic.actions.list
import borgmatic.actions.mount import borgmatic.actions.mount
@ -627,7 +627,7 @@ def collect_configuration_run_summary_logs(configs, arguments):
# no configuration file is needed for bootstrap # no configuration file is needed for bootstrap
local_borg_version = borg_version.local_borg_version({}, 'borg') local_borg_version = borg_version.local_borg_version({}, 'borg')
try: try:
borgmatic.actions.bootstrap.run_bootstrap(arguments['bootstrap'], arguments['global'], local_borg_version) borgmatic.actions.config.bootstrap.run_bootstrap(arguments['bootstrap'], arguments['global'], local_borg_version)
yield logging.makeLogRecord( yield logging.makeLogRecord(
dict( dict(
levelno=logging.INFO, levelno=logging.INFO,
@ -635,7 +635,7 @@ def collect_configuration_run_summary_logs(configs, arguments):
msg='Bootstrap successful', msg='Bootstrap successful',
) )
) )
except (CalledProcessError, ValueError, OSError) as error: except (CalledProcessError, ValueError, OSError, json.JSONDecodeError, KeyError) as error:
yield from log_error_records('Error running bootstrap', error) yield from log_error_records('Error running bootstrap', error)
return return