{"thread":{"id":"64059","subject":"Whatchanged","startedAt":"2025-08-29T13:25:05Z","lastAt":"2025-09-03T17:35:53Z","messageCount":3,"participants":["Anthony Clay","Jeff King"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"525202","messageId":"BL3P221MB0449288C8B0FA448A227FD48833AA@BL3P221MB0449.NAMP221.PROD.OUTLOOK.COM","threadId":"64059","inReplyTo":null,"subject":"Whatchanged","fromName":"Anthony Clay","fromEmail":"anthony.clay@masimo.com","sentAt":"2025-08-29T13:24:46Z","receivedAt":"2025-08-29T13:25:05Z","isPatch":false,"sender":{"key":"anthony.clay@masimo.com","avatar":null},"body":"Greetings,\n\nKernel audio driver maintainer, here. The first thing I want to know about a branch is \"whatchanged\" - it tells me exactly what I want to know with no distractions. So I was horrified when I saw the removal nomination message.  Please reconsider - while git log can do it, I don't use git log... at all. I'd just have to add another alias that would be another thing to constantly collide with while using docker build chains with different (but usually older) versions of git.\n\nThanks,\n\n~Anthony"},{"id":"525247","messageId":"20250830022718.GB567900@coredump.intra.peff.net","threadId":"64059","inReplyTo":"BL3P221MB0449288C8B0FA448A227FD48833AA@BL3P221MB0449.NAMP221.PROD.OUTLOOK.COM","subject":"Re: Whatchanged","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2025-08-30T02:27:18Z","receivedAt":"2025-08-30T02:27:19Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Fri, Aug 29, 2025 at 01:24:46PM +0000, Anthony Clay wrote:\n\n> Kernel audio driver maintainer, here. The first thing I want to know\n> about a branch is \"whatchanged\" - it tells me exactly what I want to\n> know with no distractions. So I was horrified when I saw the removal\n> nomination message.  Please reconsider - while git log can do it, I\n> don't use git log... at all. I'd just have to add another alias that\n> would be another thing to constantly collide with while using docker\n> build chains with different (but usually older) versions of git.\n\nAside from finger re-training, is there a reason that \"git log --raw\"\ndoesn't work? It should work on all versions.\n\nOn the subject of finger re-training, you mentioned aliases, which made\nme think a bit. In a post-whatchanged world, you are free to do:\n\n  git config alias.whatchanged \"log --raw --no-merges\"\n\nBefore then, that alias will be ignored. For older versions of Git,\nthat's fine; the builtin does the same thing. But there's an awkward\nperiod _now_ where whatchanged complains about deprecation, but does not\nrespect the alias.\n\nI wonder if we should loosen the \"aliases cannot override builtins\" rule\nfor deprecated commands. Perhaps something like the patch below.\n\nThat would let you configure that alias now, and everything would\ncontinue to work no matter which version of Git you used. Modulo the\nalready-released ones with the deprecation warning but without the alias\nmagic I'm suggesting. :( So maybe not quite as helpful as it could be,\nbut something that could make deprecations less painful in general.\n\nThat said, I'm not sure from what you wrote above if it helps you or\nnot. If your problem is that the containers have random unknown versions\nof Git, it would help in theory. But if your problem is that the\ncontainers do not have your alias config, then it is not much help.\n\n-Peff\n\n---\ndiff --git a/git.c b/git.c\nindex 5dc210b7b4..7c4b5a17a7 100644\n--- a/git.c\n+++ b/git.c\n@@ -794,13 +794,32 @@ static void execv_dashed_external(const char **argv)\n \t\texit(128);\n }\n \n+static int is_deprecated_command(const char *cmd)\n+{\n+\treturn !strcmp(cmd, \"whatchanged\");\n+}\n+\n static int run_argv(struct strvec *args)\n {\n \tint done_alias = 0;\n \tstruct string_list cmd_list = STRING_LIST_INIT_DUP;\n \tstruct string_list_item *seen;\n \n \twhile (1) {\n+\t\t/*\n+\t\t * Allow deprecated commands to be overridden by aliases. This\n+\t\t * creates a seamless path forward for people who want to keep\n+\t\t * using the name after it is gone, but want to skip the\n+\t\t * deprecation complaint in the meantime.\n+\t\t */\n+\t\tif (is_deprecated_command(args->v[0]) &&\n+\t\t    alias_lookup(args->v[0])) {\n+\t\t\tif (!handle_alias(args))\n+\t\t\t\tbreak;\n+\t\t\tdone_alias = 1;\n+\t\t\tcontinue;\n+\t\t}\n+\n \t\t/*\n \t\t * If we tried alias and futzed with our environment,\n \t\t * it no longer is safe to invoke builtins directly in\n"},{"id":"525450","messageId":"BL3P221MB04497E3E6A13AEB178DD38F28301A@BL3P221MB0449.NAMP221.PROD.OUTLOOK.COM","threadId":"64059","inReplyTo":"20250830022718.GB567900@coredump.intra.peff.net","subject":"Re: Whatchanged","fromName":"Anthony Clay","fromEmail":"anthony.clay@masimo.com","sentAt":"2025-09-03T17:35:43Z","receivedAt":"2025-09-03T17:35:53Z","isPatch":false,"sender":{"key":"anthony.clay@masimo.com","avatar":null},"body":"Thanks for the response!\n\nTalking with a few others here, we did discuss that the git config alias.* would be just fine.   Being able to override deprecated commands would be greatly preferred as my git config is already imported - so one and done, there.\n\n________________________________________\nFrom: Jeff King <peff@peff.net>\nSent: Friday, August 29, 2025 10:27 PM\nTo: Anthony Clay <anthony.clay@soundunited.com>\nCc: Kristoffer Haugsbakk <code@khaugsbakk.name>; git@vger.kernel.org <git@vger.kernel.org>\nSubject: Re: Whatchanged\n \nMessage originated Externally.\n\n\nOn Fri, Aug 29, 2025 at 01:24:46PM +0000, Anthony Clay wrote:\n\n> Kernel audio driver maintainer, here. The first thing I want to know\n> about a branch is \"whatchanged\" - it tells me exactly what I want to\n> know with no distractions. So I was horrified when I saw the removal\n> nomination message.  Please reconsider - while git log can do it, I\n> don't use git log... at all. I'd just have to add another alias that\n> would be another thing to constantly collide with while using docker\n> build chains with different (but usually older) versions of git.\n\nAside from finger re-training, is there a reason that \"git log --raw\"\ndoesn't work? It should work on all versions.\n\nOn the subject of finger re-training, you mentioned aliases, which made\nme think a bit. In a post-whatchanged world, you are free to do:\n\n  git config alias.whatchanged \"log --raw --no-merges\"\n\nBefore then, that alias will be ignored. For older versions of Git,\nthat's fine; the builtin does the same thing. But there's an awkward\nperiod _now_ where whatchanged complains about deprecation, but does not\nrespect the alias.\n\nI wonder if we should loosen the \"aliases cannot override builtins\" rule\nfor deprecated commands. Perhaps something like the patch below.\n\nThat would let you configure that alias now, and everything would\ncontinue to work no matter which version of Git you used. Modulo the\nalready-released ones with the deprecation warning but without the alias\nmagic I'm suggesting. :( So maybe not quite as helpful as it could be,\nbut something that could make deprecations less painful in general.\n\nThat said, I'm not sure from what you wrote above if it helps you or\nnot. If your problem is that the containers have random unknown versions\nof Git, it would help in theory. But if your problem is that the\ncontainers do not have your alias config, then it is not much help.\n\n-Peff\n\n---\ndiff --git a/git.c b/git.c\nindex 5dc210b7b4..7c4b5a17a7 100644\n--- a/git.c\n+++ b/git.c\n@@ -794,13 +794,32 @@ static void execv_dashed_external(const char **argv)\n                exit(128);\n }\n\n+static int is_deprecated_command(const char *cmd)\n+{\n+       return !strcmp(cmd, \"whatchanged\");\n+}\n+\n static int run_argv(struct strvec *args)\n {\n        int done_alias = 0;\n        struct string_list cmd_list = STRING_LIST_INIT_DUP;\n        struct string_list_item *seen;\n\n        while (1) {\n+               /*\n+                * Allow deprecated commands to be overridden by aliases. This\n+                * creates a seamless path forward for people who want to keep\n+                * using the name after it is gone, but want to skip the\n+                * deprecation complaint in the meantime.\n+                */\n+               if (is_deprecated_command(args->v[0]) &&\n+                   alias_lookup(args->v[0])) {\n+                       if (!handle_alias(args))\n+                               break;\n+                       done_alias = 1;\n+                       continue;\n+               }\n+\n                /*\n                 * If we tried alias and futzed with our environment,\n                 * it no longer is safe to invoke builtins directly in"}]}