From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Cc: "Eric Sunshine" <sunshine@sunshineco.com>,
"Rubén Justo" <rjusto@gmail.com>,
"Patrick Steinhardt" <ps@pks.im>
Subject: [PATCH v2 0/3] Branches are branches and not heads
Date: Tue, 4 Jun 2024 15:01:42 -0700 [thread overview]
Message-ID: <20240604220145.3260714-1-gitster@pobox.com> (raw)
In-Reply-To: <20240603200539.1473345-1-gitster@pobox.com>
tl;dr for those who did read v1: v2 does not warn when deprecated
variants are used.
----------------------
Back when Git started, we used the word "head" to mean the tip of
possibly multiple histories, and that is where the name of the
hierarchy .git/refs/heads/ came from. But these days we call these
entities "branches" in human terms, and "head" is still used to
refer to the tip of the history each of these branches represent.
When asking "git ls-remote" or "git show-ref" to limit their output
to branches (as opposed to showing any ref), we use "--heads" for
historical reasons, but give the option a more human friendly name
"--branches", and demote "--heads" to the status of a deprecated
synonym.
We do not plan to remove "--heads" or "-h" yet, but we may want to
do so at the Git 3.0 boundary, in which case we will need to start
advertising upcoming removal with an extra warning when they are
used. But let's not start annoying users for now.
Junio C Hamano (3):
refs: call branches branches
ls-remote: introduce --branches and deprecate --heads
show-ref: introduce --branches and deprecate --heads
Documentation/git-ls-remote.txt | 12 +++++++-----
Documentation/git-show-ref.txt | 18 ++++++++++--------
builtin/ls-remote.c | 9 ++++++---
builtin/show-ref.c | 16 +++++++++-------
connect.c | 4 ++--
remote.h | 2 +-
t/t1403-show-ref.sh | 24 ++++++++++++++++--------
t/t5512-ls-remote.sh | 32 +++++++++++++++++++++++++++-----
8 files changed, 78 insertions(+), 39 deletions(-)
Range-diff against v1:
1: 2c551ed37b = 1: 2c551ed37b refs: call branches branches
2: f88fe89ff7 ! 2: 5549e98042 ls-remote: introduce --branches and deprecate --heads
@@ Commit message
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
" [-q | --quiet] [--exit-code] [--get-url] [--sort=<key>]\n"
" [--symref] [<repository> [<patterns>...]]"),
NULL
-@@ builtin/ls-remote.c: static int tail_match(const char **pattern, const char *path)
- return 0;
- }
-
-+static int heads_callback(const struct option *opt, const char *arg, int unset)
-+{
-+ unsigned *flags = opt->value;
-+
-+ if (unset) {
-+ warning(_("'--no-heads' is deprecated; use '--no-branches' instead"));
-+ *flags &= ~REF_BRANCHES;
-+ } else {
-+ warning(_("'--heads' is deprecated; use '--branches' instead"));
-+ *flags |= REF_BRANCHES;
-+ }
-+ return 0;
-+}
-+
- int cmd_ls_remote(int argc, const char **argv, const char *prefix)
- {
- const char *dest = NULL;
@@ builtin/ls-remote.c: 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_CALLBACK_F('h', "heads", &flags,
-+ NULL,
-+ N_("deprecated synonym for --branches"),
-+ PARSE_OPT_NOARG|PARSE_OPT_HIDDEN,
-+ &heads_callback),
++ 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")),
@@ t/t5512-ls-remote.sh: test_expect_success 'ls-remote self' '
+ test_cmp expected.branches actual
+'
+
-+test_expect_success 'ls-remote -h is deprecated' '
++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_grep ! deprecated warning
+'
+
-+test_expect_success 'ls-remote --heads is deprecated' '
++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_grep ! deprecated warning
+'
+
test_expect_success 'ls-remote --sort="version:refname" --tags self' '
3: 295554edfc ! 3: 9022743a32 show-ref: introduce --branches and deprecate --heads
@@ Commit message
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-show-ref.txt ##
@@ builtin/show-ref.c: static int cmd_show_ref__patterns(const struct patterns_opti
for_each_fullref_in("refs/heads/", show_ref, &show_ref_data);
if (opts->tags_only)
for_each_fullref_in("refs/tags/", show_ref, &show_ref_data);
-@@ builtin/show-ref.c: static int exclude_existing_callback(const struct option *opt, const char *arg,
- return 0;
- }
-
-+static int heads_callback(const struct option *opt, const char *arg, int unset)
-+{
-+ int *branches_only = opt->value;
-+
-+ if (unset) {
-+ warning(_("'--no-heads' is deprecated; use '--no-branches' instead"));
-+ *branches_only = 0;
-+ } else {
-+ warning(_("'--heads' is deprecated; use '--branches' instead"));
-+ *branches_only = 1;
-+ }
-+ return 0;
-+}
-+
- int cmd_show_ref(int argc, const char **argv, const char *prefix)
- {
- struct exclude_existing_options exclude_existing_opts = {0};
@@ builtin/show-ref.c: int cmd_show_ref(int argc, const char **argv, const char *prefix)
struct show_one_options show_one_opts = {0};
int verify = 0, exists = 0;
@@ builtin/show-ref.c: int cmd_show_ref(int argc, const char **argv, const char *pr
- OPT_BOOL(0, "heads", &patterns_opts.heads_only, N_("only show heads (can be combined with tags)")),
+ OPT_BOOL(0, "tags", &patterns_opts.tags_only, N_("only show tags (can be combined with branches)")),
+ OPT_BOOL(0, "branches", &patterns_opts.branches_only, N_("only show branches (can be combined with tags)")),
-+ OPT_CALLBACK_F(0, "heads", &patterns_opts.branches_only,
-+ NULL,
-+ N_("deprecated synonym for --branches)"),
-+ PARSE_OPT_NOARG|PARSE_OPT_HIDDEN,
-+ &heads_callback),
++ OPT_HIDDEN_BOOL(0, "heads", &patterns_opts.branches_only,
++ N_("deprecated synonym for --branches")),
OPT_BOOL(0, "exists", &exists, N_("check for reference existence without resolving")),
OPT_BOOL(0, "verify", &verify, N_("stricter reference checking, "
"requires exact ref path")),
@@ t/t1403-show-ref.sh: test_expect_success 'show-ref --heads, --tags, --head, patt
test_cmp expect actual
'
-+test_expect_success 'show-ref --heads is deprecated' '
++test_expect_success 'show-ref --heads is deprecated and hidden' '
++ test_expect_code 129 git show-ref -h >short-help &&
++ test_grep ! -e --heads short-help &&
+ git show-ref --heads >actual 2>warning &&
-+ test_grep deprecated warning &&
++ test_grep ! deprecated warning &&
+ test_cmp expect.branches actual
+'
+
--
2.45.2-409-g7b0defb391
next prev parent reply other threads:[~2024-06-04 22:01 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-07 8:27 [RFC PATCH] docs: document upcoming breaking changes Patrick Steinhardt
2024-05-07 10:38 ` Johannes Schindelin
2024-05-08 13:55 ` Patrick Steinhardt
2024-05-07 22:02 ` Junio C Hamano
2024-05-08 13:54 ` Patrick Steinhardt
2024-05-08 14:58 ` Junio C Hamano
2024-05-08 15:59 ` Dragan Simic
2024-05-10 11:36 ` Patrick Steinhardt
2024-05-10 12:43 ` Dragan Simic
2024-05-08 13:15 ` Phillip Wood
2024-05-08 13:55 ` Patrick Steinhardt
2024-05-10 2:15 ` Justin Tobler
2024-05-10 4:47 ` Junio C Hamano
2024-05-14 6:50 ` Patrick Steinhardt
2024-05-14 6:16 ` [RFC PATCH v2] " Patrick Steinhardt
2024-05-14 10:48 ` Karthik Nayak
2024-05-14 11:22 ` Patrick Steinhardt
2024-05-14 15:45 ` Junio C Hamano
2024-05-14 12:32 ` Dragan Simic
2024-05-24 12:54 ` [PATCH v3] " Patrick Steinhardt
2024-05-24 17:27 ` Junio C Hamano
2024-05-30 12:04 ` Patrick Steinhardt
2024-05-30 3:23 ` Commands using -h as an option don't work consistently Junio C Hamano
2024-06-03 18:33 ` Junio C Hamano
2024-06-03 20:05 ` [PATCH 0/3] Branches are branches and not heads Junio C Hamano
2024-06-03 20:05 ` [PATCH 1/3] refs: call branches branches Junio C Hamano
2024-06-03 21:32 ` Eric Sunshine
2024-06-03 20:05 ` [PATCH 2/3] ls-remote: introduce --branches and deprecate --heads Junio C Hamano
2024-06-03 21:30 ` Rubén Justo
2024-06-03 21:42 ` Eric Sunshine
2024-06-03 21:48 ` Junio C Hamano
2024-06-03 20:05 ` [PATCH 3/3] show-ref: " Junio C Hamano
2024-06-03 21:32 ` [PATCH 0/3] Branches are branches and not heads Rubén Justo
2024-06-04 7:56 ` Patrick Steinhardt
2024-06-04 22:01 ` Junio C Hamano [this message]
2024-06-04 22:01 ` [PATCH v2 1/3] refs: call branches branches Junio C Hamano
2024-06-04 22:01 ` [PATCH v2 2/3] ls-remote: introduce --branches and deprecate --heads Junio C Hamano
2024-06-06 9:39 ` Patrick Steinhardt
2024-06-06 15:18 ` Junio C Hamano
2024-06-04 22:01 ` [PATCH v2 3/3] show-ref: " Junio C Hamano
2024-06-14 19:32 ` Elijah Newren
2024-06-14 21:21 ` Junio C Hamano
2024-06-14 21:34 ` Elijah Newren
2024-06-14 21:42 ` Elijah Newren
2024-06-14 22:46 ` Junio C Hamano
2024-06-06 9:39 ` [PATCH v2 0/3] Branches are branches and not heads Patrick Steinhardt
2024-05-31 7:56 ` [PATCH v4 0/4] docs: document upcoming breaking changes Patrick Steinhardt
2024-05-31 7:56 ` [PATCH v4 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-05-31 16:51 ` Junio C Hamano
2024-06-03 9:32 ` Patrick Steinhardt
2024-06-03 16:17 ` Junio C Hamano
2024-06-04 7:42 ` Patrick Steinhardt
2024-05-31 7:56 ` [PATCH v4 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-05-31 17:00 ` Junio C Hamano
2024-05-31 7:56 ` [PATCH v4 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-05-31 7:56 ` [PATCH v4 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
2024-05-31 17:05 ` Junio C Hamano
2024-05-31 23:35 ` Todd Zullinger
2024-05-31 8:43 ` [PATCH v4 0/4] docs: document upcoming breaking changes Junio C Hamano
2024-05-31 11:15 ` Patrick Steinhardt
2024-06-03 9:28 ` [PATCH v5 " Patrick Steinhardt
2024-06-03 9:28 ` [PATCH v5 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-06-03 14:08 ` Phillip Wood
2024-06-03 16:24 ` Junio C Hamano
2024-06-04 6:59 ` Patrick Steinhardt
2024-06-03 9:28 ` [PATCH v5 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-06-03 16:36 ` Junio C Hamano
2024-06-04 7:06 ` Patrick Steinhardt
2024-06-04 17:16 ` Junio C Hamano
2024-06-03 9:28 ` [PATCH v5 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-06-03 16:42 ` Junio C Hamano
2024-06-03 9:28 ` [PATCH v5 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
2024-06-03 16:52 ` Junio C Hamano
2024-06-04 7:11 ` Patrick Steinhardt
2024-06-04 12:32 ` [PATCH v6 0/4] docs: document upcoming breaking changes Patrick Steinhardt
2024-06-04 12:32 ` [PATCH v6 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-06-04 17:59 ` Junio C Hamano
2024-06-05 5:31 ` Patrick Steinhardt
2024-06-05 16:03 ` Junio C Hamano
2024-06-05 17:52 ` Junio C Hamano
2024-06-06 4:35 ` Patrick Steinhardt
2024-06-04 12:32 ` [PATCH v6 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-06-04 12:32 ` [PATCH v6 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-06-04 18:00 ` Junio C Hamano
2024-06-04 12:32 ` [PATCH v6 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
2024-06-04 14:23 ` [PATCH v6 0/4] docs: document upcoming breaking changes Phillip Wood
2024-06-04 18:01 ` Junio C Hamano
2024-06-05 5:32 ` Patrick Steinhardt
2024-06-14 6:42 ` [PATCH v7 " Patrick Steinhardt
2024-06-14 6:42 ` [PATCH v7 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-06-14 16:08 ` Junio C Hamano
2024-06-14 6:42 ` [PATCH v7 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-06-14 6:42 ` [PATCH v7 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-06-14 6:42 ` [PATCH v7 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
-- strict thread matches above, loose matches on Subject: below --
2024-05-29 22:03 Commands using -h as an option don't work consistently Kevin Day
2024-05-29 22:22 ` Junio C Hamano
2024-05-29 22:40 ` Kevin Day
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240604220145.3260714-1-gitster@pobox.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=ps@pks.im \
--cc=rjusto@gmail.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).