Rename several configuration options to match Borg 2 (#557).
This commit is contained in:
parent
3b6ed06686
commit
f47c98c4a5
10 changed files with 52 additions and 24 deletions
9
NEWS
9
NEWS
|
@ -4,6 +4,15 @@
|
|||
repository info). If you install Borg 2, you'll need to manually "borg transfer" or "borgmatic
|
||||
transfer" your existing Borg 1 repositories before use. See the Borg 2.0 changelog for more
|
||||
information about Borg 2: https://www.borgbackup.org/releases/borg-2.0.html
|
||||
* #557: Rename several configuration options to match Borg 2: "remote_rate_limit" is now
|
||||
"upload_rate_limit", "numeric_owner" is "numeric_ids", and "bsd_flags" is "flags". borgmatic
|
||||
still works with the old options.
|
||||
* #557: Remote repository paths without the "ssh://" syntax are deprecated but still supported for
|
||||
now. However, remote repository paths containing "~" will no longer work.
|
||||
* #557: Omitting the "--archive" flag on the "list" action is deprecated when using Borg 2. Use
|
||||
the new "rlist" action instead. And when using the "--archive" or "--find" flags on the "list"
|
||||
action with Borg 2, several flags are no longer supported: "--prefix", "--glob-archives",
|
||||
"--sort-by", "--first", and "--last".
|
||||
* #565: Fix handling of "repository" and "data" consistency checks to prevent invalid Borg flags.
|
||||
* #566: Modify "mount" and "extract" actions to require the "--repository" flag when multiple
|
||||
repositories are configured.
|
||||
|
|
|
@ -233,7 +233,7 @@ def create_archive(
|
|||
checkpoint_interval = storage_config.get('checkpoint_interval', None)
|
||||
chunker_params = storage_config.get('chunker_params', None)
|
||||
compression = storage_config.get('compression', None)
|
||||
remote_rate_limit = storage_config.get('remote_rate_limit', None)
|
||||
upload_rate_limit = storage_config.get('upload_rate_limit', None)
|
||||
umask = storage_config.get('umask', None)
|
||||
lock_wait = storage_config.get('lock_wait', None)
|
||||
files_cache = location_config.get('files_cache')
|
||||
|
@ -246,22 +246,22 @@ def create_archive(
|
|||
atime_flags = ('--noatime',) if location_config.get('atime') is False else ()
|
||||
|
||||
if feature.available(feature.Feature.NOFLAGS, local_borg_version):
|
||||
noflags_flags = ('--noflags',) if location_config.get('bsd_flags') is False else ()
|
||||
noflags_flags = ('--noflags',) if location_config.get('flags') is False else ()
|
||||
else:
|
||||
noflags_flags = ('--nobsdflags',) if location_config.get('bsd_flags') is False else ()
|
||||
noflags_flags = ('--nobsdflags',) if location_config.get('flags') is False else ()
|
||||
|
||||
if feature.available(feature.Feature.NUMERIC_IDS, local_borg_version):
|
||||
numeric_ids_flags = ('--numeric-ids',) if location_config.get('numeric_owner') else ()
|
||||
numeric_ids_flags = ('--numeric-ids',) if location_config.get('numeric_ids') else ()
|
||||
else:
|
||||
numeric_ids_flags = ('--numeric-owner',) if location_config.get('numeric_owner') else ()
|
||||
numeric_ids_flags = ('--numeric-owner',) if location_config.get('numeric_ids') else ()
|
||||
|
||||
if feature.available(feature.Feature.UPLOAD_RATELIMIT, local_borg_version):
|
||||
upload_ratelimit_flags = (
|
||||
('--upload-ratelimit', str(remote_rate_limit)) if remote_rate_limit else ()
|
||||
('--upload-ratelimit', str(upload_rate_limit)) if upload_rate_limit else ()
|
||||
)
|
||||
else:
|
||||
upload_ratelimit_flags = (
|
||||
('--remote-ratelimit', str(remote_rate_limit)) if remote_rate_limit else ()
|
||||
('--remote-ratelimit', str(upload_rate_limit)) if upload_rate_limit else ()
|
||||
)
|
||||
|
||||
ensure_files_readable(location_config.get('patterns_from'), location_config.get('exclude_from'))
|
||||
|
|
|
@ -83,9 +83,9 @@ def extract_archive(
|
|||
raise ValueError('progress and extract_to_stdout cannot both be set')
|
||||
|
||||
if feature.available(feature.Feature.NUMERIC_IDS, local_borg_version):
|
||||
numeric_ids_flags = ('--numeric-ids',) if location_config.get('numeric_owner') else ()
|
||||
numeric_ids_flags = ('--numeric-ids',) if location_config.get('numeric_ids') else ()
|
||||
else:
|
||||
numeric_ids_flags = ('--numeric-owner',) if location_config.get('numeric_owner') else ()
|
||||
numeric_ids_flags = ('--numeric-owner',) if location_config.get('numeric_ids') else ()
|
||||
|
||||
full_command = (
|
||||
(local_path, 'extract')
|
||||
|
|
|
@ -314,8 +314,8 @@ def make_parsers():
|
|||
create_parser = subparsers.add_parser(
|
||||
'create',
|
||||
aliases=SUBPARSER_ALIASES['create'],
|
||||
help='Create archives (actually perform backups)',
|
||||
description='Create archives (actually perform backups)',
|
||||
help='Create an archive (actually perform a backup)',
|
||||
description='Create an archive (actually perform a backup)',
|
||||
add_help=False,
|
||||
)
|
||||
create_group = create_parser.add_argument_group('create arguments')
|
||||
|
|
|
@ -283,7 +283,7 @@ def generate_sample_configuration(
|
|||
|
||||
if source_filename:
|
||||
source_config = load.load_configuration(source_filename)
|
||||
normalize.normalize(source_config)
|
||||
normalize.normalize(source_filename, source_config)
|
||||
|
||||
destination_config = merge_source_configuration_into_destination(
|
||||
_schema_to_sample_configuration(schema), source_config
|
||||
|
|
|
@ -36,12 +36,24 @@ def normalize(config_filename, config):
|
|||
if isinstance(checks, list) and len(checks) and isinstance(checks[0], str):
|
||||
config['consistency']['checks'] = [{'name': check_type} for check_type in checks]
|
||||
|
||||
# Rename various configuration options.
|
||||
numeric_owner = config.get('location', {}).pop('numeric_owner', None)
|
||||
if numeric_owner is not None:
|
||||
config['location']['numeric_ids'] = numeric_owner
|
||||
|
||||
bsd_flags = config.get('location', {}).pop('bsd_flags', None)
|
||||
if bsd_flags is not None:
|
||||
config['location']['flags'] = bsd_flags
|
||||
|
||||
remote_rate_limit = config.get('storage', {}).pop('remote_rate_limit', None)
|
||||
if remote_rate_limit is not None:
|
||||
config['storage']['upload_rate_limit'] = remote_rate_limit
|
||||
|
||||
# Upgrade remote repositories to ssh:// syntax, required in Borg 2.
|
||||
repositories = config.get('location', {}).get('repositories')
|
||||
if repositories:
|
||||
config['location']['repositories'] = []
|
||||
for repository in repositories:
|
||||
# TODO: Instead of logging directly here, return logs and bubble them up to be displayed *after* logging is initialized.
|
||||
if '~' in repository:
|
||||
logs.append(
|
||||
logging.makeLogRecord(
|
||||
|
|
|
@ -58,7 +58,7 @@ properties:
|
|||
database hook is used, the setting here is ignored and
|
||||
one_file_system is considered true.
|
||||
example: true
|
||||
numeric_owner:
|
||||
numeric_ids:
|
||||
type: boolean
|
||||
description: |
|
||||
Only store/extract numeric user and group identifiers.
|
||||
|
@ -90,10 +90,10 @@ properties:
|
|||
used, the setting here is ignored and read_special is
|
||||
considered true.
|
||||
example: false
|
||||
bsd_flags:
|
||||
flags:
|
||||
type: boolean
|
||||
description: |
|
||||
Record bsdflags (e.g. NODUMP, IMMUTABLE) in archive.
|
||||
Record filesystem flags (e.g. NODUMP, IMMUTABLE) in archive.
|
||||
Defaults to true.
|
||||
example: true
|
||||
files_cache:
|
||||
|
@ -255,7 +255,7 @@ properties:
|
|||
http://borgbackup.readthedocs.io/en/stable/usage/create.html
|
||||
for details. Defaults to "lz4".
|
||||
example: lz4
|
||||
remote_rate_limit:
|
||||
upload_rate_limit:
|
||||
type: integer
|
||||
description: |
|
||||
Remote network upload rate limit in kiBytes/second. Defaults
|
||||
|
|
|
@ -794,7 +794,7 @@ def test_create_archive_with_compression_calls_borg_with_compression_parameters(
|
|||
@pytest.mark.parametrize(
|
||||
'feature_available,option_flag', ((True, '--upload-ratelimit'), (False, '--remote-ratelimit')),
|
||||
)
|
||||
def test_create_archive_with_remote_rate_limit_calls_borg_with_upload_ratelimit_parameters(
|
||||
def test_create_archive_with_upload_rate_limit_calls_borg_with_upload_ratelimit_parameters(
|
||||
feature_available, option_flag
|
||||
):
|
||||
flexmock(module).should_receive('borgmatic_source_directories').and_return([])
|
||||
|
@ -829,7 +829,7 @@ def test_create_archive_with_remote_rate_limit_calls_borg_with_upload_ratelimit_
|
|||
'repositories': ['repo'],
|
||||
'exclude_patterns': None,
|
||||
},
|
||||
storage_config={'remote_rate_limit': 100},
|
||||
storage_config={'upload_rate_limit': 100},
|
||||
local_borg_version='1.2.3',
|
||||
)
|
||||
|
||||
|
@ -917,7 +917,7 @@ def test_create_archive_with_one_file_system_calls_borg_with_one_file_system_par
|
|||
@pytest.mark.parametrize(
|
||||
'feature_available,option_flag', ((True, '--numeric-ids'), (False, '--numeric-owner')),
|
||||
)
|
||||
def test_create_archive_with_numeric_owner_calls_borg_with_numeric_ids_parameter(
|
||||
def test_create_archive_with_numeric_ids_calls_borg_with_numeric_ids_parameter(
|
||||
feature_available, option_flag
|
||||
):
|
||||
flexmock(module).should_receive('borgmatic_source_directories').and_return([])
|
||||
|
@ -950,7 +950,7 @@ def test_create_archive_with_numeric_owner_calls_borg_with_numeric_ids_parameter
|
|||
location_config={
|
||||
'source_directories': ['foo', 'bar'],
|
||||
'repositories': ['repo'],
|
||||
'numeric_owner': True,
|
||||
'numeric_ids': True,
|
||||
'exclude_patterns': None,
|
||||
},
|
||||
storage_config={},
|
||||
|
@ -1102,7 +1102,7 @@ def test_create_archive_with_atime_option_calls_borg_with_corresponding_paramete
|
|||
(False, False, '--nobsdflags'),
|
||||
),
|
||||
)
|
||||
def test_create_archive_with_bsd_flags_option_calls_borg_with_corresponding_parameter(
|
||||
def test_create_archive_with_flags_option_calls_borg_with_corresponding_parameter(
|
||||
option_value, feature_available, option_flag
|
||||
):
|
||||
flexmock(module).should_receive('borgmatic_source_directories').and_return([])
|
||||
|
@ -1135,7 +1135,7 @@ def test_create_archive_with_bsd_flags_option_calls_borg_with_corresponding_para
|
|||
location_config={
|
||||
'source_directories': ['foo', 'bar'],
|
||||
'repositories': ['repo'],
|
||||
'bsd_flags': option_value,
|
||||
'flags': option_value,
|
||||
'exclude_patterns': None,
|
||||
},
|
||||
storage_config={},
|
||||
|
|
|
@ -174,7 +174,7 @@ def test_extract_archive_calls_borg_with_numeric_ids_parameter(feature_available
|
|||
repository='repo',
|
||||
archive='archive',
|
||||
paths=None,
|
||||
location_config={'numeric_owner': True},
|
||||
location_config={'numeric_ids': True},
|
||||
storage_config={},
|
||||
local_borg_version='1.2.3',
|
||||
)
|
||||
|
|
|
@ -51,6 +51,13 @@ from borgmatic.config import normalize as module
|
|||
{'consistency': {'checks': [{'name': 'archives'}]}},
|
||||
False,
|
||||
),
|
||||
({'location': {'numeric_owner': False}}, {'location': {'numeric_ids': False}}, False,),
|
||||
({'location': {'bsd_flags': False}}, {'location': {'flags': False}}, False,),
|
||||
(
|
||||
{'storage': {'remote_rate_limit': False}},
|
||||
{'storage': {'upload_rate_limit': False}},
|
||||
False,
|
||||
),
|
||||
(
|
||||
{'location': {'repositories': ['foo@bar:/repo']}},
|
||||
{'location': {'repositories': ['ssh://foo@bar/repo']}},
|
||||
|
|
Loading…
Reference in a new issue