From a31eeae27f38246ba35000fa603d884cdd1a81ae Mon Sep 17 00:00:00 2001 From: Thomas Gummerer Date: Tue, 16 Feb 2016 10:47:52 +0100 Subject: remote: use remote_is_configured() for add and rename Both remote add and remote rename use a slightly different hand-rolled check if the remote exits. The hand-rolled check may have some subtle cases in which it might fail to detect when a remote already exists. One such case was fixed in fb86e32 ("git remote: allow adding remotes agreeing with url.<...>.insteadOf"). Another case is when a remote is configured as follows: [remote "foo"] vcs = bar If we try to run `git remote add foo bar` with the above remote configuration, git segfaults. This change fixes it. In addition, git remote rename $existing foo with the configuration for foo as above silently succeeds, even though foo already exists, modifying its configuration. With this patch it fails with "remote foo already exists". Signed-off-by: Thomas Gummerer Reviewed-by: Jeff King Signed-off-by: Junio C Hamano --- t/t5505-remote.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 't/t5505-remote.sh') diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh index f1d073f1ba..94079a0e63 100755 --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@ -157,6 +157,21 @@ test_expect_success 'rename errors out early when deleting non-existent branch' ) ' +test_expect_success 'add existing foreign_vcs remote' ' + test_config remote.foo.vcs bar && + echo "fatal: remote foo already exists." >expect && + test_must_fail git remote add foo bar 2>actual && + test_i18ncmp expect actual +' + +test_expect_success 'add existing foreign_vcs remote' ' + test_config remote.foo.vcs bar && + test_config remote.bar.vcs bar && + echo "fatal: remote bar already exists." >expect && + test_must_fail git remote rename foo bar 2>actual && + test_i18ncmp expect actual +' + cat >test/expect <