The previous round is at $gmane/284248. Thanks to Peff an Junio for comments on the previous round. Changes from the previous round: - added patch documenting the --refs option - addressed peffs comments on the parse-option patch - the symrefs format now uses only ref: as an indicator for a symref - symrefs are now shown in addition to the other refs, instead of replacing them in the output. - symrefs are now filtered by the same rules as other refs. Interdiff below: diff --git a/Documentation/git-ls-remote.txt b/Documentation/git-ls-remote.txt index 5b606dd..9356df2 100644 --- a/Documentation/git-ls-remote.txt +++ b/Documentation/git-ls-remote.txt @@ -9,7 +9,7 @@ git-ls-remote - List references in a remote repository SYNOPSIS -------- [verse] -'git ls-remote' [--heads] [--tags] [--upload-pack=<exec>] +'git ls-remote' [--heads] [--tags] [--refs] [--upload-pack=<exec>] [-q | --quiet] [--exit-code] [--get-url] [--symrefs] [<repository> [<refs>...]] @@ -30,6 +30,10 @@ OPTIONS both, references stored in refs/heads and refs/tags are displayed. +--refs:: + Do not show peeled tags or pseudo-refs like HEAD or MERGE_HEAD + in the output. + -q:: --quiet:: Do not print remote URL to stderr. @@ -52,9 +56,7 @@ OPTIONS exit without talking to the remote. --symrefs:: - Show the symrefs on the server. Shows only the symrefs by - default, and can be combined with --tags and --heads to show - refs/heads and refs/tags as well. + Show the symrefs in addition to the other refs. <repository>:: The "remote" repository to query. This parameter can be diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c index f33ada9..ea73d53 100644 --- a/builtin/ls-remote.c +++ b/builtin/ls-remote.c @@ -4,7 +4,7 @@ #include "remote.h" static const char * const ls_remote_usage[] = { - N_("git ls-remote [--heads] [--tags] [--upload-pack=<exec>]\n" + N_("git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n" " [-q | --quiet] [--exit-code] [--get-url]\n" " [--symrefs] [<repository> [<refs>...]]"), NULL @@ -38,7 +38,6 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix) int get_url = 0; int quiet = 0; int status = 0; - int tags = 0, heads = 0, refs = 0; int symrefs = 0; const char *uploadpack = NULL; const char **pattern = NULL; @@ -51,13 +50,14 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix) OPT__QUIET(&quiet, N_("do not print remote URL")), OPT_STRING(0, "upload-pack", &uploadpack, N_("exec"), N_("path of git-upload-pack on the remote host")), - OPT_STRING(0, "exec", &uploadpack, N_("exec"), - N_("path of git-upload-pack on the remote host")), - OPT_SET_INT('t', "tags", &tags, N_("limit to tags"), REF_TAGS), - OPT_SET_INT('h', "heads", &heads, N_("limit to heads"), REF_HEADS), - OPT_SET_INT(0, "refs", &refs, N_("no magic fake tag refs"), REF_NORMAL), - OPT_SET_INT(0, "get-url", &get_url, - N_("take url.<base>.insteadOf into account"), 1), + { OPTION_STRING, 0, "exec", &uploadpack, N_("exec"), + N_("path of git-upload-pack on the remote host"), + PARSE_OPT_HIDDEN }, + OPT_BIT('t', "tags", &flags, N_("limit to tags"), REF_TAGS), + OPT_BIT('h', "heads", &flags, N_("limit to heads"), REF_HEADS), + OPT_BIT(0, "refs", &flags, N_("do not show peeled tags"), REF_NORMAL), + OPT_BOOL(0, "get-url", &get_url, + N_("take url.<base>.insteadOf into account")), OPT_SET_INT(0, "exit-code", &status, N_("exit with exit code 2 if no matching refs are found"), 2), OPT_BOOL(0, "symrefs", &symrefs, N_("show symrefs")), @@ -66,7 +66,6 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, options, ls_remote_usage, PARSE_OPT_STOP_AT_NON_OPTION); - flags = tags | heads | refs; dest = argv[0]; if (argc > 1) { @@ -101,15 +100,13 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix) if (!dest && !quiet) fprintf(stderr, "From %s\n", *remote->url); for ( ; ref; ref = ref->next) { - if (symrefs && ref->symref) - printf("symref: %s %s\n", ref->symref, ref->name); - if (symrefs && !flags) - continue; if (!check_ref_type(ref, flags)) continue; if (!tail_match(pattern, ref->name)) continue; - printf("%s %s\n", oid_to_hex(&ref->old_oid), ref->name); + if (symrefs && ref->symref) + printf("ref: %s\t%s\n", ref->symref, ref->name); + printf("%s\t%s\n", oid_to_hex(&ref->old_oid), ref->name); status = 0; /* we found something */ } return status; diff --git a/t/t5512-ls-remote.sh b/t/t5512-ls-remote.sh index 68a1429..3edbc9e 100755 --- a/t/t5512-ls-remote.sh +++ b/t/t5512-ls-remote.sh @@ -165,21 +165,23 @@ test_expect_success 'overrides work between mixed transfer/upload-pack hideRefs' test_expect_success 'ls-remote --symrefs' ' cat >expect <<-EOF && - symref: refs/heads/master HEAD + ref: refs/heads/master HEAD + 1bd44cb9d13204b0fe1958db0082f5028a16eb3a HEAD + 1bd44cb9d13204b0fe1958db0082f5028a16eb3a refs/heads/master + 1bd44cb9d13204b0fe1958db0082f5028a16eb3a refs/remotes/origin/HEAD + 1bd44cb9d13204b0fe1958db0082f5028a16eb3a refs/remotes/origin/master + 1bd44cb9d13204b0fe1958db0082f5028a16eb3a refs/tags/mark EOF git ls-remote --symrefs >actual && test_cmp expect actual ' -test_expect_success 'ls-remote with symrefs and refs combined' ' +test_expect_success 'ls-remote with filtered symrefs' ' cat >expect <<-EOF && - symref: refs/heads/master HEAD - 1bd44cb9d13204b0fe1958db0082f5028a16eb3a refs/heads/master - 1bd44cb9d13204b0fe1958db0082f5028a16eb3a refs/remotes/origin/HEAD - 1bd44cb9d13204b0fe1958db0082f5028a16eb3a refs/remotes/origin/master - 1bd44cb9d13204b0fe1958db0082f5028a16eb3a refs/tags/mark + ref: refs/heads/master HEAD + 1bd44cb9d13204b0fe1958db0082f5028a16eb3a HEAD EOF - git ls-remote --symrefs --refs >actual && + git ls-remote --symrefs . HEAD >actual && test_cmp expect actual ' Thomas Gummerer (5): ls-remote: document --quiet option ls-remote: document --refs option ls-remote: fix synopsis ls-remote: use parse-options api ls-remote: add support for showing symrefs Documentation/git-ls-remote.txt | 16 +++++++- builtin/ls-remote.c | 89 ++++++++++++++++------------------------- t/t5512-ls-remote.sh | 22 ++++++++++ 3 files changed, 71 insertions(+), 56 deletions(-) -- 2.7.0.30.gd0a78e9.dirty -- 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