From: kristofferhaugsbakk@fastmail.com
To: Junio C Hamano <gitster@pobox.com>
Cc: Kristoffer Haugsbakk <code@khaugsbakk.name>,
git@vger.kernel.org, Eric Sunshine <sunshine@sunshineco.com>,
peff@peff.net, Patrick Steinhardt <ps@pks.im>
Subject: [PATCH v6 0/9] you-still-use-that??: improve breaking changes troubleshooting
Date: Wed, 17 Sep 2025 22:24:10 +0200 [thread overview]
Message-ID: <cover.1758139856.short.code@khaugsbakk.name> (raw)
In-Reply-To: <cover.1757879060.git.code@khaugsbakk.name>
From: Kristoffer Haugsbakk <code@khaugsbakk.name>
Based on the recent i-still-use-that reports about whatchanged, improve
the error reporting with this command in mind:
1. Give more possible actions instead of just (only) asking them to send
an email
2. Hint how to replace their git-whatchanged(1) use with git-log(1) or
an alias `whatchanged` (you can alias deprecated commands now)
3. Minor documentation changes
4. Add `deprecated` to `git --list-cmds`
5. (new in v6) Don’t list git-whatchanged(1) as a builtin when
`WITH_BREAKING_CHANGES`
§ What the errors now look like
$ ./git whatchanged
'git whatchanged' is nominated for removal.
hint: You can replace 'git whatchanged <opts>' with:
hint: git log <opts> --raw --no-merges
hint: Or make an alias:
hint: git config set --global alias.whatchanged 'log --raw --no-merges'
If you still use this command, here's what you can do:
- read https://git-scm.com/docs/BreakingChanges.html
- check if anyone has discussed this on the mailing
list and if they came up with something that can
help you: https://lore.kernel.org/git/?q=git%20whatchanged
- send an email to <git@vger.kernel.org> to let us
know that you still use this command and were unable
to determine a suitable replacement
fatal: refusing to run without --i-still-use-this
$ ./git pack-redundant
'git pack-redundant' is nominated for removal.
If you still use this command, here's what you can do:
- read https://git-scm.com/docs/BreakingChanges.html
- check if anyone has discussed this on the mailing
list and if they came up with something that can
help you: https://lore.kernel.org/git/?q=git%20pack-redundant
- send an email to <git@vger.kernel.org> to let us
know that you still use this command and were unable
to determine a suitable replacement
fatal: refusing to run without --i-still-use-this
§ Changes in v6
Use Peff’s patch to get rid of “the extra output”.[1] Update commit
messages to not mention that.
Also use another fix from Peff (patch 1); don’t list git-whatchanged(1)
as a builtin when `WITH_BREAKING_CHANGES`.
🔗 1: https://lore.kernel.org/git/cover.1757446619.git.code@khaugsbakk.name/T/#mb3ac9c32c8527675a1f9cdf7709f2c74b3dd2a6c
Thanks
Kristoffer Haugsbakk (9):
Makefile: don’t add whatchanged after it has been removed
git: add `deprecated` category to --list-cmds
git: move seen-alias bookkeeping into handle_alias(...)
git: allow alias-shadowing deprecated builtins
t0014: test shadowing of aliases for a sample of builtins
you-still-use-that??: help the user help themselves
whatchanged: hint about git-log(1) and aliasing
whatchanged: remove not-even-shorter clause
BreakingChanges: remove claim about whatchanged reports
Documentation/BreakingChanges.adoc | 2 +-
Documentation/config/alias.adoc | 3 +-
Documentation/git-whatchanged.adoc | 8 ++-
Documentation/git.adoc | 3 +-
Makefile | 2 +
builtin/log.c | 8 ++-
builtin/pack-redundant.c | 2 +-
git-compat-util.h | 2 +-
git.c | 91 ++++++++++++++++++++----------
t/t0014-alias.sh | 57 +++++++++++++++++++
usage.c | 33 ++++++++---
11 files changed, 165 insertions(+), 46 deletions(-)
Interdiff against v5:
diff --git a/Makefile b/Makefile
index e11340c1ae7..9311da5bb15 100644
--- a/Makefile
+++ b/Makefile
@@ -883,7 +883,9 @@ BUILT_INS += git-stage$X
BUILT_INS += git-status$X
BUILT_INS += git-switch$X
BUILT_INS += git-version$X
+ifndef WITH_BREAKING_CHANGES
BUILT_INS += git-whatchanged$X
+endif
# what 'all' will build but not install in gitexecdir
OTHER_PROGRAMS += git$X
diff --git a/git.c b/git.c
index 1310363e5c4..8c85da84c30 100644
--- a/git.c
+++ b/git.c
@@ -425,7 +425,10 @@ static int handle_alias(struct strvec *args, struct string_list *expanded_aliase
if (!strcmp(alias_command, new_argv[0]))
die(_("recursive alias: %s"), alias_command);
- seen = unsorted_string_list_lookup(expanded_aliases, args->v[0]);
+ string_list_append(expanded_aliases, alias_command);
+ seen = unsorted_string_list_lookup(expanded_aliases,
+ new_argv[0]);
+
if (seen) {
struct strbuf sb = STRBUF_INIT;
for (size_t i = 0; i < expanded_aliases->nr; i++) {
@@ -441,8 +444,6 @@ static int handle_alias(struct strvec *args, struct string_list *expanded_aliase
" not terminate:%s"), expanded_aliases->items[0].string, sb.buf);
}
- string_list_append(expanded_aliases, args->v[0]);
-
trace_argv_printf(new_argv,
"trace: alias expansion: %s =>",
alias_command);
diff --git a/t/t0014-alias.sh b/t/t0014-alias.sh
index 1ac739a2737..07a53e7366e 100755
--- a/t/t0014-alias.sh
+++ b/t/t0014-alias.sh
@@ -33,7 +33,6 @@ test_expect_success 'looping aliases - deprecated builtins' '
cat >expect <<-EOF &&
${SQ}whatchanged${SQ} is aliased to ${SQ}pack-redundant${SQ}
${SQ}pack-redundant${SQ} is aliased to ${SQ}whatchanged${SQ}
- ${SQ}whatchanged${SQ} is aliased to ${SQ}pack-redundant${SQ}
fatal: alias loop detected: expansion of ${SQ}whatchanged${SQ} does not terminate:
whatchanged <==
pack-redundant ==>
Range-diff against v5:
-: ----------- > 1: 8b34edf876e Makefile: don’t add whatchanged after it has been removed
1: 13682553018 = 2: c10a24018ce git: add `deprecated` category to --list-cmds
2: 7f82ef6e96f ! 3: 90e35bfc063 git: move seen-alias bookkeeping into handle_alias(...)
@@ Commit message
The code in the `while(1)` speculatively adds commands to the list
before finding out if it’s an alias. Let’s instead move it inside
`handle_alias(...)`—where it conceptually belongs anyway—and in turn
- only run this logic when we have found an alias.[2][3]
+ only run this logic when we have found an alias.[2]
[1]: We will do that with an additional call to `handle_alias(1)` inside
the loop. *Not* moving this code leaves a blind spot; we will miss
alias looping crafted via deprecated builtin names
[2]: Also rename the list to a more descriptive name
- [3]: The error output `'<cmd1>' is aliased to '<cmd2>'` is used for the
- `<cmd2> -h` case. We will get one more (redundant) line of output
- in the case of alias looping; that is covered in the test “looping
- aliases - deprecated builtins” in the next commit
Based-on-patch-by: Jeff King <peff@peff.net>
Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
## Notes (series) ##
+ v6:
+
+ Apply Peff’s patch[1] in order to get rid of the extra output line.
+
+ Drop the footnote from the commit message now that we don’t have that
+ problem any more.
+
+ 🔗 1: https://lore.kernel.org/git/cover.1757446619.git.code@khaugsbakk.name/T/#mb3ac9c32c8527675a1f9cdf7709f2c74b3dd2a6c
+
v5 (new):
Do a preliminary code movement in order to avoid loop aliasing in the
@@ git.c: static int handle_alias(struct strvec *args)
if (!strcmp(alias_command, new_argv[0]))
die(_("recursive alias: %s"), alias_command);
-+ seen = unsorted_string_list_lookup(expanded_aliases, args->v[0]);
++ string_list_append(expanded_aliases, alias_command);
++ seen = unsorted_string_list_lookup(expanded_aliases,
++ new_argv[0]);
++
+ if (seen) {
+ struct strbuf sb = STRBUF_INIT;
+ for (size_t i = 0; i < expanded_aliases->nr; i++) {
@@ git.c: static int handle_alias(struct strvec *args)
+ die(_("alias loop detected: expansion of '%s' does"
+ " not terminate:%s"), expanded_aliases->items[0].string, sb.buf);
+ }
-+
-+ string_list_append(expanded_aliases, args->v[0]);
+
trace_argv_printf(new_argv,
"trace: alias expansion: %s =>",
3: 4bfe36cccd0 ! 4: 2cac74d731c git: allow alias-shadowing deprecated builtins
@@ Commit message
the command is removed for good.
Let’s lift this limitation by allowing *deprecated* builtins to be
- shadowed by aliases.[4]
+ shadowed by aliases.
The only observed demand for aliasing has been for git-whatchanged(1),
not for git-pack-redundant(1). But let’s be consistent and treat all
@@ Commit message
have empty commits (no changes)[2]
[2]: https://lore.kernel.org/git/20250825085428.GA367101@coredump.intra.peff.net/
[3]: https://lore.kernel.org/git/BL3P221MB0449288C8B0FA448A227FD48833AA@BL3P221MB0449.NAMP221.PROD.OUTLOOK.COM/
- [4]: The test “looping aliases - deprecated builtins” covers the
- case of the extra output mentioned in footnote number 3 of the
- previous commit
Based-on-patch-by: Jeff King <peff@peff.net>
Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
## Notes (series) ##
+ v6:
+
+ Drop footnote now that we don’t have the “extra output line” problem.
+
v5:
Fix a leak caused by calling `alias_lookup(...)` without freeing the
@@ t/t0014-alias.sh: test_expect_success 'looping aliases - internal execution' '
+ cat >expect <<-EOF &&
+ ${SQ}whatchanged${SQ} is aliased to ${SQ}pack-redundant${SQ}
+ ${SQ}pack-redundant${SQ} is aliased to ${SQ}whatchanged${SQ}
-+ ${SQ}whatchanged${SQ} is aliased to ${SQ}pack-redundant${SQ}
+ fatal: alias loop detected: expansion of ${SQ}whatchanged${SQ} does not terminate:
+ whatchanged <==
+ pack-redundant ==>
4: a04c6ae968e = 5: 3576439add5 t0014: test shadowing of aliases for a sample of builtins
5: 2f78ab2e28c = 6: 7499890ed49 you-still-use-that??: help the user help themselves
6: 34443066645 = 7: b0831e8967a whatchanged: hint about git-log(1) and aliasing
7: b0aabd793f0 = 8: 2f281944fbf whatchanged: remove not-even-shorter clause
8: 5021647c245 = 9: 7dc3d03d626 BreakingChanges: remove claim about whatchanged reports
base-commit: c44beea485f0f2feaf460e2ac87fdd5608d63cf0
--
2.51.0.274.gdcb64e51a0f
next prev parent reply other threads:[~2025-09-17 20:25 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-27 16:29 [PATCH 0/4] you-still-use-that??: improve breaking changes troubleshooting kristofferhaugsbakk
2025-08-27 16:29 ` [PATCH 1/4] usage: help the user help themselves kristofferhaugsbakk
2025-08-27 20:36 ` Kristoffer Haugsbakk
2025-08-27 21:02 ` Eric Sunshine
2025-08-27 21:20 ` Junio C Hamano
2025-08-27 21:27 ` Eric Sunshine
2025-08-27 22:26 ` Junio C Hamano
2025-08-28 6:39 ` Kristoffer Haugsbakk
2025-08-28 15:09 ` Junio C Hamano
2025-09-03 16:50 ` Eric Sunshine
2025-09-03 17:53 ` Kristoffer Haugsbakk
2025-09-03 21:21 ` Eric Sunshine
2025-09-03 21:41 ` Kristoffer Haugsbakk
2025-09-03 21:44 ` Jeff King
2025-09-03 22:11 ` Eric Sunshine
2025-09-04 6:57 ` Kristoffer Haugsbakk
2025-09-05 13:11 ` Jeff King
2025-09-09 20:01 ` Kristoffer Haugsbakk
2025-08-27 21:14 ` Junio C Hamano
2025-08-27 16:29 ` [PATCH 2/4] whatchanged: tell users the git-log(1) equivalent kristofferhaugsbakk
2025-08-27 16:45 ` Junio C Hamano
2025-08-27 16:48 ` Junio C Hamano
2025-08-27 17:08 ` Kristoffer Haugsbakk
2025-08-28 12:07 ` Kristoffer Haugsbakk
2025-08-27 16:29 ` [PATCH 3/4] whatchanged: remove not-even-shorter clause kristofferhaugsbakk
2025-08-27 16:29 ` [PATCH 4/4] BreakingChanges: remove claim about whatchanged reports kristofferhaugsbakk
2025-08-27 16:43 ` [PATCH 0/4] you-still-use-that??: improve breaking changes troubleshooting Junio C Hamano
2025-08-29 15:21 ` [PATCH v2 " kristofferhaugsbakk
2025-08-29 15:21 ` [PATCH v2 1/4] you-still-use-that??: help the user help themselves kristofferhaugsbakk
2025-08-29 15:21 ` [PATCH v2 2/4] whatchanged: tell users the git-log(1) equivalent kristofferhaugsbakk
2025-08-29 15:21 ` [PATCH v2 3/4] whatchanged: remove not-even-shorter clause kristofferhaugsbakk
2025-08-29 15:21 ` [PATCH v2 4/4] BreakingChanges: remove claim about whatchanged reports kristofferhaugsbakk
2025-09-08 15:36 ` [PATCH v3 0/8] you-still-use-that??: improve breaking changes troubleshooting kristofferhaugsbakk
2025-09-08 15:36 ` [PATCH v3 1/8] git: add `deprecated` category to --list-cmds kristofferhaugsbakk
2025-09-09 6:43 ` Patrick Steinhardt
2025-09-09 8:02 ` Kristoffer Haugsbakk
2025-09-08 15:36 ` [PATCH v3 2/8] git: make the two loops look more symmetric kristofferhaugsbakk
2025-09-08 15:36 ` [PATCH v3 3/8] git: allow alias-shadowing deprecated builtins kristofferhaugsbakk
2025-09-08 20:47 ` Junio C Hamano
2025-09-08 21:11 ` Jeff King
2025-09-08 21:55 ` Junio C Hamano
2025-09-09 6:25 ` Kristoffer Haugsbakk
2025-09-08 15:36 ` [PATCH v3 4/8] t0014: test shadowing of aliases for a sample of builtins kristofferhaugsbakk
2025-09-08 15:36 ` [PATCH v3 5/8] you-still-use-that??: help the user help themselves kristofferhaugsbakk
2025-09-08 15:36 ` [PATCH v3 6/8] whatchanged: tell users the git-log(1) equivalent kristofferhaugsbakk
2025-09-08 15:36 ` [PATCH v3 7/8] whatchanged: remove not-even-shorter clause kristofferhaugsbakk
2025-09-08 15:36 ` [PATCH v3 8/8] BreakingChanges: remove claim about whatchanged reports kristofferhaugsbakk
2025-09-09 19:45 ` [PATCH v4 0/7] you-still-use-that??: improve breaking changes troubleshooting kristofferhaugsbakk
2025-09-09 19:45 ` [PATCH v4 1/7] git: add `deprecated` category to --list-cmds kristofferhaugsbakk
2025-09-09 21:44 ` Junio C Hamano
2025-09-10 11:41 ` Patrick Steinhardt
2025-09-10 15:50 ` Jeff King
2025-09-10 21:40 ` Junio C Hamano
2025-09-10 20:23 ` Kristoffer Haugsbakk
2025-09-09 19:45 ` [PATCH v4 2/7] git: allow alias-shadowing deprecated builtins kristofferhaugsbakk
2025-09-10 5:13 ` Jeff King
2025-09-10 15:48 ` Jeff King
2025-09-10 17:58 ` Kristoffer Haugsbakk
2025-09-10 18:34 ` Jeff King
2025-09-11 17:31 ` Kristoffer Haugsbakk
2025-09-11 20:32 ` Jeff King
2025-09-11 20:43 ` Jeff King
2025-09-13 14:10 ` Kristoffer Haugsbakk
2025-09-13 22:06 ` Jeff King
2025-09-14 17:24 ` Kristoffer Haugsbakk
2025-09-15 1:44 ` Jeff King
2025-09-15 6:27 ` Kristoffer Haugsbakk
2025-09-11 20:44 ` Jeff King
2025-09-11 21:19 ` Junio C Hamano
2025-09-13 21:50 ` Kristoffer Haugsbakk
2025-09-09 19:45 ` [PATCH v4 3/7] t0014: test shadowing of aliases for a sample of builtins kristofferhaugsbakk
2025-09-09 19:45 ` [PATCH v4 4/7] you-still-use-that??: help the user help themselves kristofferhaugsbakk
2025-09-09 19:45 ` [PATCH v4 5/7] whatchanged: tell users the git-log(1) equivalent kristofferhaugsbakk
2025-09-09 19:45 ` [PATCH v4 6/7] whatchanged: remove not-even-shorter clause kristofferhaugsbakk
2025-09-09 19:45 ` [PATCH v4 7/7] BreakingChanges: remove claim about whatchanged reports kristofferhaugsbakk
2025-09-14 19:49 ` [PATCH v5 0/8] you-still-use-that??: improve breaking changes troubleshooting kristofferhaugsbakk
2025-09-14 19:49 ` [PATCH v5 1/8] git: add `deprecated` category to --list-cmds kristofferhaugsbakk
2025-09-14 19:49 ` [PATCH v5 2/8] git: move seen-alias bookkeeping into handle_alias(...) kristofferhaugsbakk
2025-09-14 19:49 ` [PATCH v5 3/8] git: allow alias-shadowing deprecated builtins kristofferhaugsbakk
2025-09-14 19:49 ` [PATCH v5 4/8] t0014: test shadowing of aliases for a sample of builtins kristofferhaugsbakk
2025-09-14 19:49 ` [PATCH v5 5/8] you-still-use-that??: help the user help themselves kristofferhaugsbakk
2025-09-14 19:49 ` [PATCH v5 6/8] whatchanged: hint about git-log(1) and aliasing kristofferhaugsbakk
2025-09-14 19:49 ` [PATCH v5 7/8] whatchanged: remove not-even-shorter clause kristofferhaugsbakk
2025-09-14 19:49 ` [PATCH v5 8/8] BreakingChanges: remove claim about whatchanged reports kristofferhaugsbakk
2025-09-15 19:19 ` [PATCH v5 0/8] you-still-use-that??: improve breaking changes troubleshooting Junio C Hamano
2025-09-16 20:47 ` Kristoffer Haugsbakk
2025-09-16 23:24 ` Jeff King
2025-09-17 15:41 ` Kristoffer Haugsbakk
2025-09-17 16:25 ` Junio C Hamano
2025-09-17 20:24 ` kristofferhaugsbakk [this message]
2025-09-17 20:24 ` [PATCH v6 1/9] Makefile: don’t add whatchanged after it has been removed kristofferhaugsbakk
2025-09-17 20:24 ` [PATCH v6 2/9] git: add `deprecated` category to --list-cmds kristofferhaugsbakk
2025-09-17 20:24 ` [PATCH v6 3/9] git: move seen-alias bookkeeping into handle_alias(...) kristofferhaugsbakk
2025-09-17 20:24 ` [PATCH v6 4/9] git: allow alias-shadowing deprecated builtins kristofferhaugsbakk
2025-09-17 20:24 ` [PATCH v6 5/9] t0014: test shadowing of aliases for a sample of builtins kristofferhaugsbakk
2025-09-17 20:24 ` [PATCH v6 6/9] you-still-use-that??: help the user help themselves kristofferhaugsbakk
2025-09-17 20:24 ` [PATCH v6 7/9] whatchanged: hint about git-log(1) and aliasing kristofferhaugsbakk
2025-09-17 20:24 ` [PATCH v6 8/9] whatchanged: remove not-even-shorter clause kristofferhaugsbakk
2025-09-17 20:24 ` [PATCH v6 9/9] BreakingChanges: remove claim about whatchanged reports kristofferhaugsbakk
2025-09-18 18:31 ` [PATCH v6 0/9] you-still-use-that??: improve breaking changes troubleshooting Jeff King
2025-09-18 20:21 ` Junio C Hamano
2025-09-18 20:28 ` Kristoffer Haugsbakk
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=cover.1758139856.short.code@khaugsbakk.name \
--to=kristofferhaugsbakk@fastmail.com \
--cc=code@khaugsbakk.name \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=ps@pks.im \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.