[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