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 committed by Junio C Hamano
parent 15b92fc052
commit 45ebdcc99a
2 changed files with 15 additions and 5 deletions

View File

@ -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,
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;
}

View File

@ -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 &&