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

[PATCH v3 3/4] remote: actually check if remote exits

From
Thomas Gummerer <t.gummerer@gmail.com>
Date
Feb 16, 2016, 09:47 UTC
Message-ID
<1455616072-20838-4-git-send-email-t.gummerer@gmail.com>
In-Reply-To
<1455616072-20838-1-git-send-email-t.gummerer@gmail.com>
When converting the git remote command to a builtin in 211c89 ("Make
git-remote a builtin"), a few calls to check if a remote exists were
converted from:
       if (!exists $remote->{$name}) {
       	  [...]
to:
       remote = remote_get(argv[1]);
       if (!remote)
          [...]

The new check is not quite correct, because remote_get() never returns NULL if a name is given. This leaves us with the somewhat cryptic error message "error: Could not remove config section 'remote.test'", if we are trying to remove a remote that does not exist, or a similar error if we try to rename a remote.

Use the remote_is_configured() function to check whether the remote actually exists, and die with a more sensible error message ("No such remote: $remotename") instead if it doesn't.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
---
 builtin/remote.c  |  4 ++--
 t/t5505-remote.sh | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/builtin/remote.c b/builtin/remote.c
index d966262..981c487 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -634,7 +634,7 @@ static int mv(int argc, const char **argv)
 	rename.remote_branches = &remote_branches;
 
 	oldremote = remote_get(rename.old);
-	if (!oldremote)
+	if (!remote_is_configured(oldremote))
 		die(_("No such remote: %s"), rename.old);
 
 	if (!strcmp(rename.old, rename.new) && oldremote->origin != REMOTE_CONFIG)
@@ -773,7 +773,7 @@ static int rm(int argc, const char **argv)
 		usage_with_options(builtin_remote_rm_usage, options);
 
 	remote = remote_get(argv[1]);
-	if (!remote)
+	if (!remote_is_configured(remote))
 		die(_("No such remote: %s"), argv[1]);
 
 	known_remotes.to_delete = remote;
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index 1a8e3b8..f1d073f 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -139,6 +139,24 @@ test_expect_success 'remove remote protects local branches' '
 	)
 '
 
+test_expect_success 'remove errors out early when deleting non-existent branch' '
+	(
+		cd test &&
+		echo "fatal: No such remote: foo" >expect &&
+		test_must_fail git remote rm foo 2>actual &&
+		test_i18ncmp expect actual
+	)
+'
+
+test_expect_success 'rename errors out early when deleting non-existent branch' '
+	(
+		cd test &&
+		echo "fatal: No such remote: foo" >expect &&
+		test_must_fail git remote rename foo bar 2>actual &&
+		test_i18ncmp expect actual
+	)
+'
+
 cat >test/expect <<EOF
 * remote origin
   Fetch URL: $(pwd)/one
-- 
2.7.1.410.g6faf27b
Previous: Thomas GummererNext: Thomas Gummerer
Message 14 of 17 in “git remote improvements”
  1. 0/4 git remote improvementsThomas Gummerer, Feb 15, 2016
  2. 1/4 remote: use parse_config_keyThomas Gummerer, Feb 15, 2016
  3. Jeff KingFeb 15, 2016
  4. Thomas GummererFeb 16, 2016
  5. 2/4 remote: simplify remote_is_configured()Thomas Gummerer, Feb 15, 2016
  6. 3/4 remote: actually check if remote exitsThomas Gummerer, Feb 15, 2016
  7. 4/4 remote: use remote_is_configured() for add and renameThomas Gummerer, Feb 15, 2016
  8. Eric SunshineFeb 15, 2016
  9. Jeff KingFeb 15, 2016
  10. Thomas GummererFeb 16, 2016
  11. 0/4 git remote improvementsThomas Gummerer, Feb 16, 2016
  12. 1/4 remote: use parse_config_keyThomas Gummerer, Feb 16, 2016
  13. 2/4 remote: simplify remote_is_configured()Thomas Gummerer, Feb 16, 2016
  14. 3/4 remote: actually check if remote exitsThomas Gummerer, Feb 16, 2016
  15. 4/4 remote: use remote_is_configured() for add and renameThomas Gummerer, Feb 16, 2016
  16. Jeff KingFeb 16, 2016
  17. Junio C HamanoFeb 16, 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.