git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v5 0/8] you-still-use-that??: improve breaking changes troubleshooting

From
Kristoffer Haugsbakk <code@khaugsbakk.name>
Date
Sep 17, 2025, 15:41 UTC
Message-ID
<8673bb92-6bc5-47b8-bef8-bd59669f095f@app.fastmail.com>
In-Reply-To
<20250916232446.GA1189675@coredump.intra.peff.net>
On Wed, Sep 17, 2025, at 01:24, Jeff King wrote:
Show 79 quoted lines
> On Tue, Sep 16, 2025 at 10:47:58PM +0200, Kristoffer Haugsbakk wrote:
>
>> Thanks.  This is (maybe you surmise or know already but) a
>> problem when on the branch itself as well.  I did some compiling
>> `WITH_BREAKING_CHANGES=YesPlease` and it seems that 07572f220a8
>> (whatchanged: remove when built with WITH_BREAKING_CHANGES, 2025-05-12)
>> made it a hard error to call `whatchanged` after its death:
>>
>>     $ ./bin-wrappers/git whatchanged
>>     fatal: cannot handle whatchanged as a builtin
>>
>> This seems fine, although I would have expected it to say something more
>> neutral like “command not found”.
>
> I think the breaking-changes code for whatchanged did not update the
> Makefile appropriately. If I build with that flag:
>
>   [make sure it is not here]
>   $ rm git-whatchanged
>
>   [now build]
>   $ make WITH_BREAKING_CHANGES=YesPlease
>     [...]
>     BUILTIN git-whatchanged
>     SUBDIR templates
>
>   $ ls -l git-whatchanged
>   -rwxrwxr-x 140 peff peff 12104368 Sep 16 19:15 git-whatchanged*
>
> So we have linked it in the usual way we do for builtins, so that
> git-whatchanged would "work". But of course since it is not in the
> builtin table, it does not:
>
>   $ ./git-whatchanged
>   fatal: cannot handle whatchanged as a builtin
>
> And then because it exists in the exec-path, "git whatchanged" thinks
> that it can run the dashed form, so it produces the same message.
>
> We probably need this:
>
> diff --git a/Makefile b/Makefile
> index e11340c1ae..9311da5bb1 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
>
> but annoyingly an old build will leave git-whatchanged in place and
> cause the same confusion. And git-status won't even notice that it's
> leftover because .gitignore mentions it. But we can't drop it from
> .gitignore until the non-breaking-changes builds go away entirely. Yuck.
>
>> What I don’t understand though is this:
>>
>>     $ ./bin-wrappers/git -c alias.whatchanged=status whatchanged
>>     fatal: cannot handle whatchanged as a builtin
>>
>> People have been saying that people can at least alias `whatchanged` to
>> `log <something>` and then it will work after the removal.  But now that
>> it has been removed (according to the commit message) its spirit lives
>> on and prevents reusing the name?
>
> I'd have thought the alias took precedence over the stale executable
> file. But it can't, because "whatchanged" is no longer marked as
> deprecated in the builtin list. Because it's not in the builtin list at
> all! So it is just a "normal" non-deprecated external command from the
> perspective of git.c, and you are not allowed to override it.
>
> So I think the alias code is working as expected, but the stale file is
> causing the same confusion as above. Deleting it makes everything work.

That’s great, I think I understand. It is my understanding that the change to `Makefile` is needed for the test to not break when `WITH_BREAKING_CHANGES` is active. Well I tried now with a *make* after

    git fsck -d -x -f

And it fails the same way. So I’ll just steal this change... (as well) and include it in preparations for the others.

(Thanks so much!)
-----
Draft of the commit message:
-----
Makefile: don’t add whatchanged after it has been removed

07572f220a8 (whatchanged: remove when built with WITH_BREAKING_CHANGES, 2025-05-12) set up the removal of git-whatchanged(1) when `WITH_BREAKING_CHANGES` is active. Part of that work was removing it from `commands` in `git.c`. But the the Makefile still lists it as a builtin . That leaves it in the limbo of being linked but not being callable; you get the generic error about not being able to call it as a *builtin*:

    $ git whatchanged
    fatal: cannot handle whatchanged as a builtin
instead of the expected:
    $ git whatchanged
    git: 'whatchanged' is not a git command. See 'git --help'.
Previous: Jeff KingNext: Junio C Hamano
Message 88 of 102 in “you-still-use-that??: improve breaking changes troubleshooting”
  1. 0/4 you-still-use-that??: improve breaking changes troubleshootingkristofferhaugsbakk@fastmail.com, Aug 27, 2025
  2. 1/4 usage: help the user help themselveskristofferhaugsbakk@fastmail.com, Aug 27, 2025
  3. Kristoffer HaugsbakkAug 27, 2025
  4. Eric SunshineAug 27, 2025
  5. Junio C HamanoAug 27, 2025
  6. Eric SunshineAug 27, 2025
  7. Junio C HamanoAug 27, 2025
  8. Kristoffer HaugsbakkAug 28, 2025
  9. Junio C HamanoAug 28, 2025
  10. Eric SunshineSep 3, 2025
  11. Kristoffer HaugsbakkSep 3, 2025
  12. Eric SunshineSep 3, 2025
  13. Kristoffer HaugsbakkSep 3, 2025
  14. Jeff KingSep 3, 2025
  15. Eric SunshineSep 3, 2025
  16. Kristoffer HaugsbakkSep 4, 2025
  17. Jeff KingSep 5, 2025
  18. Kristoffer HaugsbakkSep 9, 2025
  19. Junio C HamanoAug 27, 2025
  20. 2/4 whatchanged: tell users the git-log(1) equivalentkristofferhaugsbakk@fastmail.com, Aug 27, 2025
  21. Junio C HamanoAug 27, 2025
  22. Junio C HamanoAug 27, 2025
  23. Kristoffer HaugsbakkAug 27, 2025
  24. Kristoffer HaugsbakkAug 28, 2025
  25. 3/4 whatchanged: remove not-even-shorter clausekristofferhaugsbakk@fastmail.com, Aug 27, 2025
  26. 4/4 BreakingChanges: remove claim about whatchanged reportskristofferhaugsbakk@fastmail.com, Aug 27, 2025
  27. Junio C HamanoAug 27, 2025
  28. 0/4 you-still-use-that??: improve breaking changes troubleshootingkristofferhaugsbakk@fastmail.com, Aug 29, 2025
  29. 1/4 you-still-use-that??: help the user help themselveskristofferhaugsbakk@fastmail.com, Aug 29, 2025
  30. 2/4 whatchanged: tell users the git-log(1) equivalentkristofferhaugsbakk@fastmail.com, Aug 29, 2025
  31. 3/4 whatchanged: remove not-even-shorter clausekristofferhaugsbakk@fastmail.com, Aug 29, 2025
  32. 4/4 BreakingChanges: remove claim about whatchanged reportskristofferhaugsbakk@fastmail.com, Aug 29, 2025
  33. 0/8 you-still-use-that??: improve breaking changes troubleshootingkristofferhaugsbakk@fastmail.com, Sep 8, 2025
  34. 1/8 git: add `deprecated` category to --list-cmdskristofferhaugsbakk@fastmail.com, Sep 8, 2025
  35. Patrick SteinhardtSep 9, 2025
  36. Kristoffer HaugsbakkSep 9, 2025
  37. 2/8 git: make the two loops look more symmetrickristofferhaugsbakk@fastmail.com, Sep 8, 2025
  38. 3/8 git: allow alias-shadowing deprecated builtinskristofferhaugsbakk@fastmail.com, Sep 8, 2025
  39. Junio C HamanoSep 8, 2025
  40. Jeff KingSep 8, 2025
  41. Junio C HamanoSep 8, 2025
  42. Kristoffer HaugsbakkSep 9, 2025
  43. 4/8 t0014: test shadowing of aliases for a sample of builtinskristofferhaugsbakk@fastmail.com, Sep 8, 2025
  44. 5/8 you-still-use-that??: help the user help themselveskristofferhaugsbakk@fastmail.com, Sep 8, 2025
  45. 6/8 whatchanged: tell users the git-log(1) equivalentkristofferhaugsbakk@fastmail.com, Sep 8, 2025
  46. 7/8 whatchanged: remove not-even-shorter clausekristofferhaugsbakk@fastmail.com, Sep 8, 2025
  47. 8/8 BreakingChanges: remove claim about whatchanged reportskristofferhaugsbakk@fastmail.com, Sep 8, 2025
  48. 0/7 you-still-use-that??: improve breaking changes troubleshootingkristofferhaugsbakk@fastmail.com, Sep 9, 2025
  49. 1/7 git: add `deprecated` category to --list-cmdskristofferhaugsbakk@fastmail.com, Sep 9, 2025
  50. Junio C HamanoSep 9, 2025
  51. Patrick SteinhardtSep 10, 2025
  52. Jeff KingSep 10, 2025
  53. Junio C HamanoSep 10, 2025
  54. Kristoffer HaugsbakkSep 10, 2025
  55. 2/7 git: allow alias-shadowing deprecated builtinskristofferhaugsbakk@fastmail.com, Sep 9, 2025
  56. Jeff KingSep 10, 2025
  57. Jeff KingSep 10, 2025
  58. Kristoffer HaugsbakkSep 10, 2025
  59. Jeff KingSep 10, 2025
  60. Kristoffer HaugsbakkSep 11, 2025
  61. Jeff KingSep 11, 2025
  62. Jeff KingSep 11, 2025
  63. Kristoffer HaugsbakkSep 13, 2025
  64. Jeff KingSep 13, 2025
  65. Kristoffer HaugsbakkSep 14, 2025
  66. Jeff KingSep 15, 2025
  67. Kristoffer HaugsbakkSep 15, 2025
  68. Jeff KingSep 11, 2025
  69. Junio C HamanoSep 11, 2025
  70. Kristoffer HaugsbakkSep 13, 2025
  71. 3/7 t0014: test shadowing of aliases for a sample of builtinskristofferhaugsbakk@fastmail.com, Sep 9, 2025
  72. 4/7 you-still-use-that??: help the user help themselveskristofferhaugsbakk@fastmail.com, Sep 9, 2025
  73. 5/7 whatchanged: tell users the git-log(1) equivalentkristofferhaugsbakk@fastmail.com, Sep 9, 2025
  74. 6/7 whatchanged: remove not-even-shorter clausekristofferhaugsbakk@fastmail.com, Sep 9, 2025
  75. 7/7 BreakingChanges: remove claim about whatchanged reportskristofferhaugsbakk@fastmail.com, Sep 9, 2025
  76. 0/8 you-still-use-that??: improve breaking changes troubleshootingkristofferhaugsbakk@fastmail.com, Sep 14, 2025
  77. 1/8 git: add `deprecated` category to --list-cmdskristofferhaugsbakk@fastmail.com, Sep 14, 2025
  78. 2/8 git: move seen-alias bookkeeping into handle_alias(...)kristofferhaugsbakk@fastmail.com, Sep 14, 2025
  79. 3/8 git: allow alias-shadowing deprecated builtinskristofferhaugsbakk@fastmail.com, Sep 14, 2025
  80. 4/8 t0014: test shadowing of aliases for a sample of builtinskristofferhaugsbakk@fastmail.com, Sep 14, 2025
  81. 5/8 you-still-use-that??: help the user help themselveskristofferhaugsbakk@fastmail.com, Sep 14, 2025
  82. 6/8 whatchanged: hint about git-log(1) and aliasingkristofferhaugsbakk@fastmail.com, Sep 14, 2025
  83. 7/8 whatchanged: remove not-even-shorter clausekristofferhaugsbakk@fastmail.com, Sep 14, 2025
  84. 8/8 BreakingChanges: remove claim about whatchanged reportskristofferhaugsbakk@fastmail.com, Sep 14, 2025
  85. Junio C HamanoSep 15, 2025
  86. Kristoffer HaugsbakkSep 16, 2025
  87. Jeff KingSep 16, 2025
  88. Kristoffer HaugsbakkSep 17, 2025
  89. Junio C HamanoSep 17, 2025
  90. 0/9 you-still-use-that??: improve breaking changes troubleshootingkristofferhaugsbakk@fastmail.com, Sep 17, 2025
  91. 1/9 Makefile: don’t add whatchanged after it has been removedkristofferhaugsbakk@fastmail.com, Sep 17, 2025
  92. 2/9 git: add `deprecated` category to --list-cmdskristofferhaugsbakk@fastmail.com, Sep 17, 2025
  93. 3/9 git: move seen-alias bookkeeping into handle_alias(...)kristofferhaugsbakk@fastmail.com, Sep 17, 2025
  94. 4/9 git: allow alias-shadowing deprecated builtinskristofferhaugsbakk@fastmail.com, Sep 17, 2025
  95. 5/9 t0014: test shadowing of aliases for a sample of builtinskristofferhaugsbakk@fastmail.com, Sep 17, 2025
  96. 6/9 you-still-use-that??: help the user help themselveskristofferhaugsbakk@fastmail.com, Sep 17, 2025
  97. 7/9 whatchanged: hint about git-log(1) and aliasingkristofferhaugsbakk@fastmail.com, Sep 17, 2025
  98. 8/9 whatchanged: remove not-even-shorter clausekristofferhaugsbakk@fastmail.com, Sep 17, 2025
  99. 9/9 BreakingChanges: remove claim about whatchanged reportskristofferhaugsbakk@fastmail.com, Sep 17, 2025
  100. Jeff KingSep 18, 2025
  101. Junio C HamanoSep 18, 2025
  102. Kristoffer HaugsbakkSep 18, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.