Fix a traceback when the "repositories" option contains both strings and key/value pairs (#794).

This commit is contained in:
Dan Helfman 2023-12-04 11:17:13 -08:00
parent c34ad7dde7
commit 8b49a59aff
4 changed files with 14 additions and 15 deletions

3
NEWS
View file

@ -1,3 +1,6 @@
1.8.6.dev0
* #794: Fix a traceback when the "repositories" option contains both strings and key/value pairs.
1.8.5
* #701: Add a "skip_actions" option to skip running particular actions, handy for append-only or
checkless configurations. See the documentation for more information:

View file

@ -192,7 +192,7 @@ def normalize(config_filename, config):
# Upgrade remote repositories to ssh:// syntax, required in Borg 2.
repositories = config.get('repositories')
if repositories:
if isinstance(repositories[0], str):
if any(isinstance(repository, str) for repository in repositories):
logs.append(
logging.makeLogRecord(
dict(
@ -202,7 +202,10 @@ def normalize(config_filename, config):
)
)
)
config['repositories'] = [{'path': repository} for repository in repositories]
config['repositories'] = [
{'path': repository} if isinstance(repository, str) else repository
for repository in repositories
]
repositories = config['repositories']
config['repositories'] = []

View file

@ -1,6 +1,6 @@
from setuptools import find_packages, setup
VERSION = '1.8.5'
VERSION = '1.8.6.dev0'
setup(

View file

@ -216,6 +216,11 @@ def test_normalize_sections_with_only_scalar_raises():
{'repositories': [{'path': '/repo'}]},
True,
),
(
{'repositories': [{'path': 'first'}, 'file:///repo']},
{'repositories': [{'path': 'first'}, {'path': '/repo'}]},
True,
),
(
{'repositories': [{'path': 'foo@bar:/repo', 'label': 'foo'}]},
{'repositories': [{'path': 'ssh://foo@bar/repo', 'label': 'foo'}]},
@ -251,15 +256,3 @@ def test_normalize_applies_hard_coded_normalization_to_config(
assert logs
else:
assert logs == []
def test_normalize_raises_error_if_repository_data_is_not_consistent():
flexmock(module).should_receive('normalize_sections').and_return([])
with pytest.raises(TypeError):
module.normalize(
'test.yaml',
{
'repositories': [{'path': 'foo@bar:/repo', 'label': 'foo'}, 'file:///repo'],
},
)