remote: die on config error when setting URL

When invoking `git-remote --set-url` we do not check the return
value when writing the actual new URL to the configuration file,
pretending to the user that the configuration has been set while
it was in fact not persisted.

Fix this problem by dying early when setting the config fails.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2016-02-22 12:23:28 +01:00 коммит произвёл Junio C Hamano
Родитель 15b92fc052
Коммит 45ebdcc99a
2 изменённых файлов: 15 добавлений и 5 удалений

Просмотреть файл

@ -1579,11 +1579,12 @@ static int set_url(int argc, const char **argv)
/* Special cases that add new entry. */
if ((!oldurl && !delete_mode) || add_mode) {
if (add_mode)
git_config_set_multivar(name_buf.buf, newurl,
"^$", 0);
git_config_set_multivar_or_die(name_buf.buf, newurl,
"^$", 0);
else
git_config_set(name_buf.buf, newurl);
git_config_set_or_die(name_buf.buf, newurl);
strbuf_release(&name_buf);
return 0;
}
@ -1604,9 +1605,9 @@ static int set_url(int argc, const char **argv)
regfree(&old_regex);
if (!delete_mode)
git_config_set_multivar(name_buf.buf, newurl, oldurl, 0);
git_config_set_multivar_or_die(name_buf.buf, newurl, oldurl, 0);
else
git_config_set_multivar(name_buf.buf, NULL, oldurl, 1);
git_config_set_multivar_or_die(name_buf.buf, NULL, oldurl, 1);
return 0;
}

Просмотреть файл

@ -932,6 +932,15 @@ test_expect_success 'get-url on new remote' '
echo foo | get_url_test --push --all someremote
'
test_expect_success 'remote set-url with locked config' '
test_when_finished "rm -f .git/config.lock" &&
git config --get-all remote.someremote.url >expect &&
>.git/config.lock &&
test_must_fail git remote set-url someremote baz &&
git config --get-all remote.someremote.url >actual &&
cmp expect actual
'
test_expect_success 'remote set-url bar' '
git remote set-url someremote bar &&
echo bar >expect &&