Assert existence of config file's parent directory

Fixes TheLocehiliosan/yadm#226

When a config file path is passed to yadm whose parent directory does
not exist, git (and hence yadm) fails without writing the file.
Yadm should, however, make sure that the directory exists s.t. git can
just write to the file.
This commit is contained in:
jonasc 2020-06-01 19:37:43 +02:00 committed by Tim Byrne
parent 550a6b4340
commit 60b23e33e8
No known key found for this signature in database
GPG Key ID: 14DB4FC2465A4B12
2 changed files with 26 additions and 0 deletions

View File

@ -137,3 +137,27 @@ def test_config_local_write(runner, yadm_y, paths, supported_local_configs):
assert run.success
assert run.err == ''
assert run.out.strip() == f'value_of_{config}'
def test_config_without_parent_directory(runner, yadm_y, paths):
"""Write and read attribute to/from config file with non-existent parent directory
Update configuration file
Display value
Exit with 0
"""
config_file = paths.root + '/folder/does/not/exist/config'
run = runner(yadm_y('--yadm-config', config_file, 'config', TEST_KEY, TEST_VALUE))
assert run.success
assert run.err == ''
assert run.out == ''
paths.config.write(TEST_FILE)
run = runner(yadm_y('--yadm-config', config_file, 'config', TEST_KEY))
assert run.success
assert run.err == ''
assert run.out.strip() == TEST_VALUE

2
yadm
View File

@ -849,6 +849,8 @@ EOF
CHANGES_POSSIBLE=1
else
# make sure parent folder of config file exists
assert_parent "$YADM_CONFIG"
# operate on the yadm configuration file
"$GIT_PROGRAM" config --file="$(mixed_path "$YADM_CONFIG")" "$@"