]> git.ipfire.org Git - thirdparty/git.git/commitdiff
ls-remote: introduce --branches and deprecate --heads
authorJunio C Hamano <gitster@pobox.com>
Tue, 4 Jun 2024 22:01:44 +0000 (15:01 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 4 Jun 2024 22:07:08 +0000 (15:07 -0700)
We call the tips of branches "heads", but this command calls the
option to show only branches "--heads", which confuses the branches
themselves and the tips of branches.

Straighten the terminology by introducing "--branches" option that
limits the output to branches, and deprecate "--heads" option used
that way.

We do not plan to remove "--heads" or "-h" yet; we may want to do so
at Git 3.0, in which case, we may need to start advertising upcoming
removal with an extra warning when they are used.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-ls-remote.txt
builtin/ls-remote.c
t/t5512-ls-remote.sh

index 1c4f696ab57e2a241bee0ebab07d0bb199e77b3e..76c86c3ce4fee0cabc8015a1a372e3931bd97155 100644 (file)
@@ -9,7 +9,7 @@ git-ls-remote - List references in a remote repository
 SYNOPSIS
 --------
 [verse]
-'git ls-remote' [--heads] [--tags] [--refs] [--upload-pack=<exec>]
+'git ls-remote' [--branches] [--tags] [--refs] [--upload-pack=<exec>]
              [-q | --quiet] [--exit-code] [--get-url] [--sort=<key>]
              [--symref] [<repository> [<patterns>...]]
 
@@ -21,14 +21,16 @@ commit IDs.
 
 OPTIONS
 -------
--h::
---heads::
+-b::
+--branches::
 -t::
 --tags::
-       Limit to only refs/heads and refs/tags, respectively.
+       Limit to only local branches and local tags, respectively.
        These options are _not_ mutually exclusive; when given
        both, references stored in refs/heads and refs/tags are
-       displayed.  Note that `git ls-remote -h` used without
+       displayed.  Note that `--heads` and `-h` are deprecated
+       synonyms for `--branches` and `-b` and may be removed in
+       the future.  Also note that `git ls-remote -h` used without
        anything else on the command line gives help, consistent
        with other git subcommands.
 
index 65fb22a8a28f595ec77b9137b8df6d95764733af..69841ed49f66ace60eed9bbc6e84ce6c1054a280 100644 (file)
@@ -9,7 +9,7 @@
 #include "wildmatch.h"
 
 static const char * const ls_remote_usage[] = {
-       N_("git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
+       N_("git ls-remote [--branches] [--tags] [--refs] [--upload-pack=<exec>]\n"
           "              [-q | --quiet] [--exit-code] [--get-url] [--sort=<key>]\n"
           "              [--symref] [<repository> [<patterns>...]]"),
        NULL
@@ -68,7 +68,10 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
                           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_BRANCHES),
+               OPT_BIT('b', "branches", &flags, N_("limit to branches"), REF_BRANCHES),
+               OPT_BIT_F('h', "heads", &flags,
+                         N_("deprecated synonym for --branches"), REF_BRANCHES,
+                         PARSE_OPT_HIDDEN),
                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")),
index 5dbe107ce88f98e75341d5ba3b25ae4f8d10d35f..42e77eb5a98adc853daebda5c86ea576e906660d 100755 (executable)
@@ -47,6 +47,7 @@ test_expect_success setup '
        git show-ref -d >refs &&
        sed -e "s/ /    /" refs >>expected.all &&
 
+       grep refs/heads/ expected.all >expected.branches &&
        git remote add self "$(pwd)/.git" &&
        git remote add self2 "."
 '
@@ -71,6 +72,27 @@ test_expect_success 'ls-remote self' '
        test_cmp expected.all actual
 '
 
+test_expect_success 'ls-remote --branches self' '
+       git ls-remote --branches self >actual &&
+       test_cmp expected.branches actual &&
+       git ls-remote -b self >actual &&
+       test_cmp expected.branches actual
+'
+
+test_expect_success 'ls-remote -h is deprecated w/o warning' '
+       git ls-remote -h self >actual 2>warning &&
+       test_cmp expected.branches actual &&
+       test_grep ! deprecated warning
+'
+
+test_expect_success 'ls-remote --heads is deprecated and hidden w/o warning' '
+       test_expect_code 129 git ls-remote -h >short-help &&
+       test_grep ! -e --head short-help &&
+       git ls-remote --heads self >actual 2>warning &&
+       test_cmp expected.branches actual &&
+       test_grep ! deprecated warning
+'
+
 test_expect_success 'ls-remote --sort="version:refname" --tags self' '
        generate_references \
                refs/tags/mark \
@@ -275,7 +297,7 @@ test_expect_success 'ls-remote with filtered symref (refname)' '
        test_cmp expect actual
 '
 
-test_expect_success 'ls-remote with filtered symref (--heads)' '
+test_expect_success 'ls-remote with filtered symref (--branches)' '
        git symbolic-ref refs/heads/foo refs/tags/mark &&
        cat >expect.v2 <<-EOF &&
        ref: refs/tags/mark     refs/heads/foo
@@ -283,9 +305,9 @@ test_expect_success 'ls-remote with filtered symref (--heads)' '
        $rev    refs/heads/main
        EOF
        grep -v "^ref: refs/tags/" <expect.v2 >expect.v0 &&
-       git -c protocol.version=0 ls-remote --symref --heads . >actual.v0 &&
+       git -c protocol.version=0 ls-remote --symref --branches . >actual.v0 &&
        test_cmp expect.v0 actual.v0 &&
-       git -c protocol.version=2 ls-remote --symref --heads . >actual.v2 &&
+       git -c protocol.version=2 ls-remote --symref --branches . >actual.v2 &&
        test_cmp expect.v2 actual.v2
 '
 
@@ -335,9 +357,9 @@ test_expect_success 'ls-remote patterns work with all protocol versions' '
 test_expect_success 'ls-remote prefixes work with all protocol versions' '
        git for-each-ref --format="%(objectname)        %(refname)" \
                refs/heads/ refs/tags/ >expect &&
-       git -c protocol.version=0 ls-remote --heads --tags . >actual.v0 &&
+       git -c protocol.version=0 ls-remote --branches --tags . >actual.v0 &&
        test_cmp expect actual.v0 &&
-       git -c protocol.version=2 ls-remote --heads --tags . >actual.v2 &&
+       git -c protocol.version=2 ls-remote --branches --tags . >actual.v2 &&
        test_cmp expect actual.v2
 '