summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2016-02-22 11:23:28 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-02-22 18:23:52 (GMT)
commit45ebdcc99a8d8e7c671eb1db1212d90f5f2db341 (patch)
tree4ef31953f9eb62f517d24bd40f4af045b4911539
parent15b92fc05239a3c4f9af6177c1bfae1bcf2d5dce (diff)
downloadgit-45ebdcc99a8d8e7c671eb1db1212d90f5f2db341.zip
git-45ebdcc99a8d8e7c671eb1db1212d90f5f2db341.tar.gz
git-45ebdcc99a8d8e7c671eb1db1212d90f5f2db341.tar.bz2
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>
-rw-r--r--builtin/remote.c11
-rwxr-xr-xt/t5505-remote.sh9
2 files changed, 15 insertions, 5 deletions
diff --git a/builtin/remote.c b/builtin/remote.c
index 6694cf2..0771e42 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -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;
}
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index dfaf9d9..013e03d 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -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 &&