[PATCH] ls-remote: default to 'origin' when no remote specified

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Instead of breaking execution when no remote (as specified in the
variable dest) is specified when git-ls-remote is invoked, continue on
and let remote_get() handle it.

That way, we are able to use the default remote (by default, "origin"),
as git-fetch, git-push, and others, do.

While we're at it, die with a more interesting message ("Where do you
want to..."), as git-fetch does, instead of the plain usage help.

Add several tests to check that git-ls-remote handles the
no-remote-specified situation.

Signed-off-by: Tay Ray Chuan <rctay89@xxxxxxxxx>
---
 builtin/ls-remote.c  |    5 ++---
 t/t5512-ls-remote.sh |   37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 39 insertions(+), 3 deletions(-)

diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c
index 70f5622..dfada83 100644
--- a/builtin/ls-remote.c
+++ b/builtin/ls-remote.c
@@ -73,9 +73,6 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
 		break;
 	}
 
-	if (!dest)
-		usage(ls_remote_usage);
-
 	if (argv[i]) {
 		int j;
 		pattern = xcalloc(sizeof(const char *), argc - i + 1);
@@ -87,6 +84,8 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
 		}
 	}
 	remote = remote_get(dest);
+	if (!remote)
+		die("Where do you want to list from today?");
 	if (!remote->url_nr)
 		die("remote %s has no configured URL", dest);
 	transport = transport_get(remote, NULL);
diff --git a/t/t5512-ls-remote.sh b/t/t5512-ls-remote.sh
index 1dd8eed..e19429b 100755
--- a/t/t5512-ls-remote.sh
+++ b/t/t5512-ls-remote.sh
@@ -49,4 +49,41 @@ test_expect_success 'ls-remote self' '
 
 '
 
+cat >exp <<EOF
+fatal: Where do you want to list from today?
+EOF
+test_expect_success 'dies with message when no remote specified and no default remote found' '
+
+	!(git ls-remote >actual 2>&1) &&
+	test_cmp exp actual
+
+'
+
+test_expect_success 'defaults to "origin" when no remote specified' '
+
+	git remote add origin "$(pwd)/.git"
+	git ls-remote >actual &&
+	test_cmp expected.all actual
+
+'
+
+cat >exp <<EOF
+fatal: 'refs*master' does not appear to be a git repository
+fatal: The remote end hung up unexpectedly
+EOF
+test_expect_success 'confuses pattern as remote when no remote specified' '
+	#
+	# Although ugly, this behaviour is akin to the confusion of refspecs for
+	# remotes by git-fetch and git-push, eg:
+	#
+	#   $ git fetch branch
+	#
+
+	# We could just as easily have used "master"; the "*" emphasizes its
+	# role as a pattern.
+	!(git ls-remote refs*master >actual 2>&1) &&
+	test_cmp exp actual
+
+'
+
 test_done
-- 
1.7.0.97.g1372c

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]