]> granicus.if.org Git - git/commitdiff
remote: die on config error when setting URL
authorPatrick Steinhardt <ps@pks.im>
Mon, 22 Feb 2016 11:23:28 +0000 (12:23 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 22 Feb 2016 18:23:52 +0000 (10:23 -0800)
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>
builtin/remote.c
t/t5505-remote.sh

index 6694cf20efdc01fb59d0b6afa41f7b1557c9b2d5..0771e425197f0d55415507afde12352d3a2fb333 100644 (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,
-                               "^$", 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;
 }
 
index dfaf9d9f68939f0c39a512c478265b4aa227c973..013e03dee2651f6891782325671f0764bb02f41f 100755 (executable)
@@ -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 &&