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

[PATCH v2 3/9] remote: handle config errors in set_url

From
Patrick Steinhardt <ps@pks.im>
Date
Jan 28, 2016, 09:00 UTC
Message-ID
<1453971637-22273-4-git-send-email-ps@pks.im>
In-Reply-To
<1453971637-22273-1-git-send-email-ps@pks.im>

The return codes for function calls that write the new URL configuration are not being checked in `set_url`. As the function is exposed to the user directly through `git remote set-url` we want to inform her that we were not able to complete the request and abort the program.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 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 4 of 13 in “Handle errors when setting configs”
  1. 0/9 Handle errors when setting configsPatrick Steinhardt, Jan 28, 2016
  2. 1/9 config: introduce set_or_die wrappersPatrick Steinhardt, Jan 28, 2016
  3. 2/9 branch: return error code for install_branch_configPatrick Steinhardt, Jan 28, 2016
  4. 3/9 remote: handle config errors in set_urlPatrick Steinhardt, Jan 28, 2016
  5. 4/9 clone: handle config errors in cmd_clonePatrick Steinhardt, Jan 28, 2016
  6. 5/9 branch: handle config errors when unsetting upstreamPatrick Steinhardt, Jan 28, 2016
  7. 6/9 init-db: handle config errorsPatrick Steinhardt, Jan 28, 2016
  8. 7/9 sequencer: handle config errors when saving optsPatrick Steinhardt, Jan 28, 2016
  9. 8/9 submodule--helper: handle config errorsPatrick Steinhardt, Jan 28, 2016
  10. 9/9 compat: die when unable to set core.precomposeunicodePatrick Steinhardt, Jan 28, 2016
  11. Jeff KingJan 29, 2016
  12. Junio C HamanoJan 29, 2016
  13. Patrick SteinhardtJan 30, 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.