From 45ebdcc99a8d8e7c671eb1db1212d90f5f2db341 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Mon, 22 Feb 2016 12:23:28 +0100 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- builtin/remote.c | 11 ++++++----- t/t5505-remote.sh | 9 +++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/builtin/remote.c b/builtin/remote.c index 6694cf20ef..0771e42519 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 dfaf9d9f68..013e03dee2 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 && -- 2.11.4.GIT