git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 07/15] remote: die on config error when setting URL

From
Patrick Steinhardt <ps@pks.im>
Date
Feb 2, 2016, 11:51 UTC
Message-ID
<1454413916-31984-8-git-send-email-ps@pks.im>
In-Reply-To
<1454413916-31984-1-git-send-email-ps@pks.im>

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
---
 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 2b2ff9b..8b78c3d 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -1583,11 +1583,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;
 	}
 
@@ -1608,9 +1609,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 1a8e3b8..e019f27 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.7.0
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 13 of 26 in “config: make git_config_set die on failure”
  1. 00/15 config: make git_config_set die on failurePatrick Steinhardt, Feb 2, 2016
  2. 01/15 config: introduce set_or_die wrappersPatrick Steinhardt, Feb 2, 2016
  3. 02/15 branch: die on error in setting up tracking branchPatrick Steinhardt, Feb 2, 2016
  4. Junio C HamanoFeb 2, 2016
  5. Patrick SteinhardtFeb 8, 2016
  6. Patrick SteinhardtFeb 8, 2016
  7. 03/15 branch: die on config error when unsetting upstreamPatrick Steinhardt, Feb 2, 2016
  8. 04/15 branch: die on config error when editing branch descriptionPatrick Steinhardt, Feb 2, 2016
  9. 05/15 submodule: die on config error when linking modulesPatrick Steinhardt, Feb 2, 2016
  10. 06/15 submodule--helper: die on config error when cloning modulePatrick Steinhardt, Feb 2, 2016
  11. Eric SunshineFeb 2, 2016
  12. Patrick SteinhardtFeb 8, 2016
  13. 07/15 remote: die on config error when setting URLPatrick Steinhardt, Feb 2, 2016
  14. Patrick SteinhardtFeb 2, 2016
  15. 08/15 remote: die on config error when setting/adding branchesPatrick Steinhardt, Feb 2, 2016
  16. 09/15 remote: die on config error when manipulating remotesPatrick Steinhardt, Feb 2, 2016
  17. 10/15 clone: die on config error in cmd_clonePatrick Steinhardt, Feb 2, 2016
  18. Junio C HamanoFeb 2, 2016
  19. 11/15 init-db: die on config errors when initializing empty repoPatrick Steinhardt, Feb 2, 2016
  20. 12/15 sequencer: die on config error when saving replay optsPatrick Steinhardt, Feb 2, 2016
  21. 13/15 compat: die when unable to set core.precomposeunicodePatrick Steinhardt, Feb 2, 2016
  22. 14/15 config: rename git_config_set to git_config_set_gentlyPatrick Steinhardt, Feb 2, 2016
  23. 15/15 config: rename git_config_set_or_die to git_config_setPatrick Steinhardt, Feb 2, 2016
  24. Stefan BellerFeb 2, 2016
  25. Junio C HamanoFeb 2, 2016
  26. Patrick SteinhardtFeb 4, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.