* [PATCH v3 1/6] you-still-use-that??: help deprecating commands for removal
2025-05-03 0:58 ` [PATCH v3 0/6] " Junio C Hamano
@ 2025-05-03 0:58 ` Junio C Hamano
2025-05-12 17:35 ` Elijah Newren
2025-05-03 0:58 ` [PATCH v3 2/6] doc: prepare for a world without whatchanged Junio C Hamano
` (5 subsequent siblings)
6 siblings, 1 reply; 39+ messages in thread
From: Junio C Hamano @ 2025-05-03 0:58 UTC (permalink / raw)
To: git
A command slated for removal like "git pack-redundant" gains a
command line option "--i-still-use-this", and refuses to work when
the option is not given. The message and the instruction upon
seeing what to do are both rather long, so before letting another
command to use the same mechanism, factor out the message+die part
into a small helper function, and use that.
The existing pack-redundant test lacked a test to make sure that we
require the --i-still-use-this option. Add one while we are at it.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
builtin/pack-redundant.c | 10 ++--------
git-compat-util.h | 2 ++
t/t5323-pack-redundant.sh | 5 +++++
usage.c | 12 ++++++++++++
4 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
index 3febe732f8..6dc9e020c7 100644
--- a/builtin/pack-redundant.c
+++ b/builtin/pack-redundant.c
@@ -625,14 +625,8 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix UNUSED, s
break;
}
- if (!i_still_use_this) {
- fputs(_("'git pack-redundant' is nominated for removal.\n"
- "If you still use this command, please add an extra\n"
- "option, '--i-still-use-this', on the command line\n"
- "and let us know you still use it by sending an e-mail\n"
- "to <git@vger.kernel.org>. Thanks.\n"), stderr);
- die(_("refusing to run without --i-still-use-this"));
- }
+ if (!i_still_use_this)
+ you_still_use_that("git pack-redundant");
if (load_all_packs)
load_all();
diff --git a/git-compat-util.h b/git-compat-util.h
index e123288e8f..21cab99567 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -703,6 +703,8 @@ void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
void show_usage_if_asked(int ac, const char **av, const char *err);
+NORETURN void you_still_use_that(const char *command_name);
+
#ifndef NO_OPENSSL
#ifdef APPLE_COMMON_CRYPTO
#include "compat/apple-common-crypto.h"
diff --git a/t/t5323-pack-redundant.sh b/t/t5323-pack-redundant.sh
index 688cd9706c..f2f20cfa40 100755
--- a/t/t5323-pack-redundant.sh
+++ b/t/t5323-pack-redundant.sh
@@ -45,6 +45,11 @@ fi
main_repo=main.git
shared_repo=shared.git
+test_expect_success 'pack-redundant needs --i-still-use-this' '
+ test_must_fail git pack-redundant >message 2>&1 &&
+ test_grep "nominated for removal" message
+'
+
git_pack_redundant='git pack-redundant --i-still-use-this'
# Create commits in <repo> and assign each commit's oid to shell variables
diff --git a/usage.c b/usage.c
index 38b46bbbfe..4aaad2b553 100644
--- a/usage.c
+++ b/usage.c
@@ -372,3 +372,15 @@ void bug_fl(const char *file, int line, const char *fmt, ...)
trace2_cmd_error_va(fmt, ap);
va_end(ap);
}
+
+NORETURN void you_still_use_that(const char *command_name)
+{
+ fprintf(stderr,
+ _("'%s' is nominated for removal.\n"
+ "If you still use this command, please add an extra\n"
+ "option, '--i-still-use-this', on the command line\n"
+ "and let us know you still use it by sending an e-mail\n"
+ "to <git@vger.kernel.org>. Thanks.\n"),
+ command_name);
+ die(_("refusing to run without --i-still-use-this"));
+}
--
2.49.0-601-ga5925c3955
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [PATCH v3 1/6] you-still-use-that??: help deprecating commands for removal
2025-05-03 0:58 ` [PATCH v3 1/6] you-still-use-that??: help deprecating commands " Junio C Hamano
@ 2025-05-12 17:35 ` Elijah Newren
0 siblings, 0 replies; 39+ messages in thread
From: Elijah Newren @ 2025-05-12 17:35 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Fri, May 2, 2025 at 5:58 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> A command slated for removal like "git pack-redundant" gains a
> command line option "--i-still-use-this", and refuses to work when
> the option is not given. The message and the instruction upon
> seeing what to do are both rather long, so before letting another
> command to use the same mechanism, factor out the message+die part
> into a small helper function, and use that.
>
> The existing pack-redundant test lacked a test to make sure that we
> require the --i-still-use-this option. Add one while we are at it.
The "gains a command line option" made me think you were discussing a
change made by this patch, rather than discussing an existing
mechanism. Could I spitball an alternative? Maybe something like...
Commands slated for removal, like "git pack-redundant", now require an
explicit --i-still-use-this option to run. This discourages casual use and
surfaces their pending deprecation to users.
The warning message is long, so we factor it into a helper function
(you_still_use_that()) to simplify reuse by other commands.
Also add a missing test to ensure this enforcement works for
"pack-redundant".
>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> builtin/pack-redundant.c | 10 ++--------
> git-compat-util.h | 2 ++
> t/t5323-pack-redundant.sh | 5 +++++
> usage.c | 12 ++++++++++++
> 4 files changed, 21 insertions(+), 8 deletions(-)
>
> diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
> index 3febe732f8..6dc9e020c7 100644
> --- a/builtin/pack-redundant.c
> +++ b/builtin/pack-redundant.c
> @@ -625,14 +625,8 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix UNUSED, s
> break;
> }
>
> - if (!i_still_use_this) {
> - fputs(_("'git pack-redundant' is nominated for removal.\n"
> - "If you still use this command, please add an extra\n"
> - "option, '--i-still-use-this', on the command line\n"
> - "and let us know you still use it by sending an e-mail\n"
> - "to <git@vger.kernel.org>. Thanks.\n"), stderr);
> - die(_("refusing to run without --i-still-use-this"));
> - }
> + if (!i_still_use_this)
> + you_still_use_that("git pack-redundant");
>
> if (load_all_packs)
> load_all();
> diff --git a/git-compat-util.h b/git-compat-util.h
> index e123288e8f..21cab99567 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
> @@ -703,6 +703,8 @@ void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
>
> void show_usage_if_asked(int ac, const char **av, const char *err);
>
> +NORETURN void you_still_use_that(const char *command_name);
> +
> #ifndef NO_OPENSSL
> #ifdef APPLE_COMMON_CRYPTO
> #include "compat/apple-common-crypto.h"
> diff --git a/t/t5323-pack-redundant.sh b/t/t5323-pack-redundant.sh
> index 688cd9706c..f2f20cfa40 100755
> --- a/t/t5323-pack-redundant.sh
> +++ b/t/t5323-pack-redundant.sh
> @@ -45,6 +45,11 @@ fi
> main_repo=main.git
> shared_repo=shared.git
>
> +test_expect_success 'pack-redundant needs --i-still-use-this' '
> + test_must_fail git pack-redundant >message 2>&1 &&
> + test_grep "nominated for removal" message
> +'
> +
> git_pack_redundant='git pack-redundant --i-still-use-this'
>
> # Create commits in <repo> and assign each commit's oid to shell variables
> diff --git a/usage.c b/usage.c
> index 38b46bbbfe..4aaad2b553 100644
> --- a/usage.c
> +++ b/usage.c
> @@ -372,3 +372,15 @@ void bug_fl(const char *file, int line, const char *fmt, ...)
> trace2_cmd_error_va(fmt, ap);
> va_end(ap);
> }
> +
> +NORETURN void you_still_use_that(const char *command_name)
> +{
> + fprintf(stderr,
> + _("'%s' is nominated for removal.\n"
> + "If you still use this command, please add an extra\n"
> + "option, '--i-still-use-this', on the command line\n"
> + "and let us know you still use it by sending an e-mail\n"
> + "to <git@vger.kernel.org>. Thanks.\n"),
> + command_name);
> + die(_("refusing to run without --i-still-use-this"));
> +}
> --
> 2.49.0-601-ga5925c3955
Patch looks good.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [PATCH v3 2/6] doc: prepare for a world without whatchanged
2025-05-03 0:58 ` [PATCH v3 0/6] " Junio C Hamano
2025-05-03 0:58 ` [PATCH v3 1/6] you-still-use-that??: help deprecating commands " Junio C Hamano
@ 2025-05-03 0:58 ` Junio C Hamano
2025-05-12 17:36 ` Elijah Newren
2025-05-03 0:58 ` [PATCH v3 3/6] tests: " Junio C Hamano
` (4 subsequent siblings)
6 siblings, 1 reply; 39+ messages in thread
From: Junio C Hamano @ 2025-05-03 0:58 UTC (permalink / raw)
To: git
These documents mention "whatchanged" as an example, that can be
substituted by something else. A new hypothetical command "walken"
would come near "whatchanged" but since the latter may be going
away, we can say it would come near "version", as the fictitious
command sorts between them. Similarly, we do not have to use
"whatchanged" as an example of a subcommand that is also implemented
in builtin/log.c file; we can instead mention "show".
Both of these changes allow us not to worry about adjusting these
places when "whatchanged" is finally removed.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/MyFirstObjectWalk.adoc | 4 ++--
Documentation/user-manual.adoc | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Documentation/MyFirstObjectWalk.adoc b/Documentation/MyFirstObjectWalk.adoc
index d6e9dfdbbe..102a465a48 100644
--- a/Documentation/MyFirstObjectWalk.adoc
+++ b/Documentation/MyFirstObjectWalk.adoc
@@ -83,13 +83,13 @@ int cmd_walken(int argc, const char **argv, const char *prefix)
}
----
-Also add the relevant line in `builtin.h` near `cmd_whatchanged()`:
+Also add the relevant line in `builtin.h` near `cmd_version()`:
----
int cmd_walken(int argc, const char **argv, const char *prefix);
----
-Include the command in `git.c` in `commands[]` near the entry for `whatchanged`,
+Include the command in `git.c` in `commands[]` near the entry for `version`,
maintaining alphabetical ordering:
----
diff --git a/Documentation/user-manual.adoc b/Documentation/user-manual.adoc
index d2b478ad23..7124345966 100644
--- a/Documentation/user-manual.adoc
+++ b/Documentation/user-manual.adoc
@@ -4240,7 +4240,7 @@ command `git`. The source side of a builtin is
- an entry in `BUILTIN_OBJECTS` in the `Makefile`.
Sometimes, more than one builtin is contained in one source file. For
-example, `cmd_whatchanged()` and `cmd_log()` both reside in `builtin/log.c`,
+example, `cmd_show()` and `cmd_log()` both reside in `builtin/log.c`,
since they share quite a bit of code. In that case, the commands which are
_not_ named like the `.c` file in which they live have to be listed in
`BUILT_INS` in the `Makefile`.
--
2.49.0-601-ga5925c3955
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [PATCH v3 2/6] doc: prepare for a world without whatchanged
2025-05-03 0:58 ` [PATCH v3 2/6] doc: prepare for a world without whatchanged Junio C Hamano
@ 2025-05-12 17:36 ` Elijah Newren
0 siblings, 0 replies; 39+ messages in thread
From: Elijah Newren @ 2025-05-12 17:36 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Fri, May 2, 2025 at 5:58 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> These documents mention "whatchanged" as an example, that can be
> substituted by something else.
Perhaps:
These documents mention "whatchanged" as an example, which can be
substituted with something else.
?
> A new hypothetical command "walken"
> would come near "whatchanged" but since the latter may be going
> away, we can say it would come near "version", as the fictitious
> command sorts between them. Similarly, we do not have to use
> "whatchanged" as an example of a subcommand that is also implemented
> in builtin/log.c file; we can instead mention "show".
>
> Both of these changes allow us not to worry about adjusting these
> places when "whatchanged" is finally removed.
Could I suggest (now changing my previous suggestion to handle the
entire commit message):
doc: prepare for a world without whatchanged
Some documentation examples reference `whatchanged`, either as a
placeholder command or as an example of source structure.
To reduce the need for future edits when `whatchanged` is removed,
these references are replaced with alternatives:
- In `MyFirstObjectWalk.adoc`, we use `version` as the nearby anchor
point for `walken`, instead of `whatchanged`.
- In `user-manual.adoc`, we now cite `show` instead of `whatchanged`
as a command that coexists with `log` in builtin/log.c.
This avoids needing further cleanup when `whatchanged` is retired.
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> Documentation/MyFirstObjectWalk.adoc | 4 ++--
> Documentation/user-manual.adoc | 2 +-
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/MyFirstObjectWalk.adoc b/Documentation/MyFirstObjectWalk.adoc
> index d6e9dfdbbe..102a465a48 100644
> --- a/Documentation/MyFirstObjectWalk.adoc
> +++ b/Documentation/MyFirstObjectWalk.adoc
> @@ -83,13 +83,13 @@ int cmd_walken(int argc, const char **argv, const char *prefix)
> }
> ----
>
> -Also add the relevant line in `builtin.h` near `cmd_whatchanged()`:
> +Also add the relevant line in `builtin.h` near `cmd_version()`:
>
> ----
> int cmd_walken(int argc, const char **argv, const char *prefix);
> ----
>
> -Include the command in `git.c` in `commands[]` near the entry for `whatchanged`,
> +Include the command in `git.c` in `commands[]` near the entry for `version`,
> maintaining alphabetical ordering:
>
> ----
> diff --git a/Documentation/user-manual.adoc b/Documentation/user-manual.adoc
> index d2b478ad23..7124345966 100644
> --- a/Documentation/user-manual.adoc
> +++ b/Documentation/user-manual.adoc
> @@ -4240,7 +4240,7 @@ command `git`. The source side of a builtin is
> - an entry in `BUILTIN_OBJECTS` in the `Makefile`.
>
> Sometimes, more than one builtin is contained in one source file. For
> -example, `cmd_whatchanged()` and `cmd_log()` both reside in `builtin/log.c`,
> +example, `cmd_show()` and `cmd_log()` both reside in `builtin/log.c`,
> since they share quite a bit of code. In that case, the commands which are
> _not_ named like the `.c` file in which they live have to be listed in
> `BUILT_INS` in the `Makefile`.
> --
> 2.49.0-601-ga5925c3955
Patch looks good.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [PATCH v3 3/6] tests: prepare for a world without whatchanged
2025-05-03 0:58 ` [PATCH v3 0/6] " Junio C Hamano
2025-05-03 0:58 ` [PATCH v3 1/6] you-still-use-that??: help deprecating commands " Junio C Hamano
2025-05-03 0:58 ` [PATCH v3 2/6] doc: prepare for a world without whatchanged Junio C Hamano
@ 2025-05-03 0:58 ` Junio C Hamano
2025-05-05 6:56 ` Patrick Steinhardt
2025-05-12 17:36 ` Elijah Newren
2025-05-03 0:58 ` [PATCH v3 4/6] whatchanged: require --i-still-use-this Junio C Hamano
` (3 subsequent siblings)
6 siblings, 2 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-03 0:58 UTC (permalink / raw)
To: git
Some tests on fast-import run "git whatchanged" without even
checking the output from the command. It is tempting to remove the
calls altogether since they are not doing anything useful, but they
presumably were placed while the tests were developped to manually
sanity check which paths were touched.
Replace these calls with "git log --raw", which is a rough
equivalent in the more modern Git.
This does not remove "git whatchanged", but we no longer have to
worry about adjusting these places when we eventually do.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
t/t9300-fast-import.sh | 12 ++++++------
t/t9301-fast-import-notes.sh | 2 +-
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index b258dbf1df..4dc3d645bf 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
@@ -120,7 +120,7 @@ test_expect_success 'A: create pack from stdin' '
INPUT_END
git fast-import --export-marks=marks.out <input &&
- git whatchanged main
+ git log --raw main
'
test_expect_success 'A: verify pack' '
@@ -279,7 +279,7 @@ test_expect_success 'A: verify marks import does not crash' '
INPUT_END
git fast-import --import-marks=marks.out <input &&
- git whatchanged verify--import-marks
+ git log --raw verify--import-marks
'
test_expect_success 'A: verify pack' '
@@ -652,7 +652,7 @@ test_expect_success 'C: incremental import create pack from stdin' '
INPUT_END
git fast-import <input &&
- git whatchanged branch
+ git log --raw branch
'
test_expect_success 'C: verify pack' '
@@ -715,7 +715,7 @@ test_expect_success 'D: inline data in commit' '
INPUT_END
git fast-import <input &&
- git whatchanged branch
+ git log --raw branch
'
test_expect_success 'D: verify pack' '
@@ -882,7 +882,7 @@ test_expect_success 'H: deletall, add 1' '
INPUT_END
git fast-import <input &&
- git whatchanged H
+ git log --raw H
'
test_expect_success 'H: verify pack' '
@@ -2066,7 +2066,7 @@ test_expect_success 'Q: commit notes' '
INPUT_END
git fast-import <input &&
- git whatchanged notes-test
+ git log --raw notes-test
'
test_expect_success 'Q: verify pack' '
diff --git a/t/t9301-fast-import-notes.sh b/t/t9301-fast-import-notes.sh
index 1ae4d7c0d3..e62173cf1f 100755
--- a/t/t9301-fast-import-notes.sh
+++ b/t/t9301-fast-import-notes.sh
@@ -76,7 +76,7 @@ INPUT_END
test_expect_success 'set up main branch' '
git fast-import <input &&
- git whatchanged main
+ git log --raw main
'
commit4=$(git rev-parse refs/heads/main)
--
2.49.0-601-ga5925c3955
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [PATCH v3 3/6] tests: prepare for a world without whatchanged
2025-05-03 0:58 ` [PATCH v3 3/6] tests: " Junio C Hamano
@ 2025-05-05 6:56 ` Patrick Steinhardt
2025-05-12 17:36 ` Elijah Newren
1 sibling, 0 replies; 39+ messages in thread
From: Patrick Steinhardt @ 2025-05-05 6:56 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Fri, May 02, 2025 at 05:58:11PM -0700, Junio C Hamano wrote:
> Some tests on fast-import run "git whatchanged" without even
> checking the output from the command. It is tempting to remove the
> calls altogether since they are not doing anything useful, but they
> presumably were placed while the tests were developped to manually
s/developped/developed/
Patrick
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH v3 3/6] tests: prepare for a world without whatchanged
2025-05-03 0:58 ` [PATCH v3 3/6] tests: " Junio C Hamano
2025-05-05 6:56 ` Patrick Steinhardt
@ 2025-05-12 17:36 ` Elijah Newren
1 sibling, 0 replies; 39+ messages in thread
From: Elijah Newren @ 2025-05-12 17:36 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Fri, May 2, 2025 at 5:58 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> Some tests on fast-import run "git whatchanged" without even
> checking the output from the command. It is tempting to remove the
> calls altogether since they are not doing anything useful, but they
> presumably were placed while the tests were developped to manually
Perhaps use "invoked" (or "used" or "employed") rather than "placed"?
"placed" feels a bit awkward here.
(and there's the developped typo that Patrick already pointed out.)
> sanity check which paths were touched.
>
> Replace these calls with "git log --raw", which is a rough
> equivalent in the more modern Git.
>
> This does not remove "git whatchanged", but we no longer have to
> worry about adjusting these places when we eventually do.
Seems like a definite positive change.
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> t/t9300-fast-import.sh | 12 ++++++------
> t/t9301-fast-import-notes.sh | 2 +-
> 2 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
> index b258dbf1df..4dc3d645bf 100755
> --- a/t/t9300-fast-import.sh
> +++ b/t/t9300-fast-import.sh
> @@ -120,7 +120,7 @@ test_expect_success 'A: create pack from stdin' '
>
> INPUT_END
> git fast-import --export-marks=marks.out <input &&
> - git whatchanged main
> + git log --raw main
> '
>
> test_expect_success 'A: verify pack' '
> @@ -279,7 +279,7 @@ test_expect_success 'A: verify marks import does not crash' '
> INPUT_END
>
> git fast-import --import-marks=marks.out <input &&
> - git whatchanged verify--import-marks
> + git log --raw verify--import-marks
> '
>
> test_expect_success 'A: verify pack' '
> @@ -652,7 +652,7 @@ test_expect_success 'C: incremental import create pack from stdin' '
> INPUT_END
>
> git fast-import <input &&
> - git whatchanged branch
> + git log --raw branch
> '
>
> test_expect_success 'C: verify pack' '
> @@ -715,7 +715,7 @@ test_expect_success 'D: inline data in commit' '
> INPUT_END
>
> git fast-import <input &&
> - git whatchanged branch
> + git log --raw branch
> '
>
> test_expect_success 'D: verify pack' '
> @@ -882,7 +882,7 @@ test_expect_success 'H: deletall, add 1' '
>
> INPUT_END
> git fast-import <input &&
> - git whatchanged H
> + git log --raw H
> '
>
> test_expect_success 'H: verify pack' '
> @@ -2066,7 +2066,7 @@ test_expect_success 'Q: commit notes' '
> INPUT_END
>
> git fast-import <input &&
> - git whatchanged notes-test
> + git log --raw notes-test
> '
>
> test_expect_success 'Q: verify pack' '
> diff --git a/t/t9301-fast-import-notes.sh b/t/t9301-fast-import-notes.sh
> index 1ae4d7c0d3..e62173cf1f 100755
> --- a/t/t9301-fast-import-notes.sh
> +++ b/t/t9301-fast-import-notes.sh
> @@ -76,7 +76,7 @@ INPUT_END
> test_expect_success 'set up main branch' '
>
> git fast-import <input &&
> - git whatchanged main
> + git log --raw main
> '
>
> commit4=$(git rev-parse refs/heads/main)
> --
> 2.49.0-601-ga5925c3955
Looks good.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [PATCH v3 4/6] whatchanged: require --i-still-use-this
2025-05-03 0:58 ` [PATCH v3 0/6] " Junio C Hamano
` (2 preceding siblings ...)
2025-05-03 0:58 ` [PATCH v3 3/6] tests: " Junio C Hamano
@ 2025-05-03 0:58 ` Junio C Hamano
2025-05-05 6:56 ` Patrick Steinhardt
2025-05-03 0:58 ` [PATCH v3 5/6] whatchanged: remove when built with WITH_BREAKING_CHANGES Junio C Hamano
` (2 subsequent siblings)
6 siblings, 1 reply; 39+ messages in thread
From: Junio C Hamano @ 2025-05-03 0:58 UTC (permalink / raw)
To: git
The documentation of "git whatchanged" is pretty explicit that this
has retained for historical reasons to help those whose fingers
cannot be retrained. Let's see if they still are finding it hard to
type "git log --raw" instead of "git whatchanged" by marking the
command as "nominated for removal", and require "--i-still-use-this"
on the command line. Adjust the tests so that the option is passed
when we invoke the command. In addition, we test that the command
fails when "--i-still-use-this" is not given.
While at it, update the documentation page to use the new [synopsis]
facility to mark-up the SYNOPSIS part.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/git-whatchanged.adoc | 4 ++--
builtin/log.c | 13 +++++++++++++
t/t4013-diff-various.sh | 17 +++++++++++++++--
t/t4202-log.sh | 14 +++++++++-----
4 files changed, 39 insertions(+), 9 deletions(-)
diff --git a/Documentation/git-whatchanged.adoc b/Documentation/git-whatchanged.adoc
index 8e55e0bb1e..d400b68d4b 100644
--- a/Documentation/git-whatchanged.adoc
+++ b/Documentation/git-whatchanged.adoc
@@ -8,8 +8,8 @@ git-whatchanged - Show logs with differences each commit introduces
SYNOPSIS
--------
-[verse]
-'git whatchanged' <option>...
+[synopsis]
+git whatchanged <option>...
DESCRIPTION
-----------
diff --git a/builtin/log.c b/builtin/log.c
index 04a6ef97bc..0f98ac8a34 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -113,6 +113,13 @@ struct log_config {
int fmt_patch_name_max;
char *fmt_pretty;
char *default_date_mode;
+
+ /*
+ * Note: git_log_config() does not touch this member and that
+ * is very deliberate. This member is only to be used to
+ * resurrect whatchanged that is deprecated.
+ */
+ int i_still_use_this;
};
static void log_config_init(struct log_config *cfg)
@@ -267,6 +274,8 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
OPT__QUIET(&quiet, N_("suppress diff output")),
OPT_BOOL(0, "source", &source, N_("show source")),
OPT_BOOL(0, "use-mailmap", &mailmap, N_("use mail map file")),
+ OPT_HIDDEN_BOOL(0, "i-still-use-this", &cfg->i_still_use_this,
+ "<use this deprecated command>"),
OPT_ALIAS(0, "mailmap", "use-mailmap"),
OPT_CALLBACK_F(0, "clear-decorations", NULL, NULL,
N_("clear all previously-defined decoration filters"),
@@ -656,6 +665,10 @@ int cmd_whatchanged(int argc,
opt.def = "HEAD";
opt.revarg_opt = REVARG_COMMITTISH;
cmd_log_init(argc, argv, prefix, &rev, &opt, &cfg);
+
+ if (!cfg.i_still_use_this)
+ you_still_use_that("git whatchanged");
+
if (!rev.diffopt.output_format)
rev.diffopt.output_format = DIFF_FORMAT_RAW;
diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh
index 3855d68dbc..8caab2ee38 100755
--- a/t/t4013-diff-various.sh
+++ b/t/t4013-diff-various.sh
@@ -203,11 +203,19 @@ do
test_expect_success "git $cmd # magic is ${magic:-(not used)}" '
{
echo "$ git $cmd"
+
+ case "$cmd" in
+ whatchanged | whatchanged" "*)
+ run="whatchanged --i-still-use-this"
+ run="$run ${cmd#whatchanged}" ;;
+ *)
+ run=$cmd ;;
+ esac &&
case "$magic" in
"")
- GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
+ GIT_PRINT_SHA1_ELLIPSIS=yes git $run ;;
noellipses)
- git $cmd ;;
+ git $run ;;
esac |
sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
-e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
@@ -454,6 +462,11 @@ diff-tree --stat --compact-summary initial mode
diff-tree -R --stat --compact-summary initial mode
EOF
+test_expect_success 'whatchanged needs --i-still-use-this' '
+ test_must_fail git whatchanged >message 2>&1 &&
+ test_grep "nominated for removal" message
+'
+
test_expect_success 'log -m matches pure log' '
git log master >result &&
process_diffs result >expected &&
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index 51f7beb59f..ce4c7ab2af 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -490,6 +490,7 @@ for cmd in show whatchanged reflog format-patch
do
case "$cmd" in
format-patch) myarg="HEAD~.." ;;
+ whatchanged) myarg=--i-still-use-this ;;
*) myarg= ;;
esac
@@ -1202,19 +1203,22 @@ test_expect_success 'reflog is expected format' '
'
test_expect_success 'whatchanged is expected format' '
+ whatchanged="whatchanged --i-still-use-this" &&
git log --no-merges --raw >expect &&
- git whatchanged >actual &&
+ git $whatchanged >actual &&
test_cmp expect actual
'
test_expect_success 'log.abbrevCommit configuration' '
+ whatchanged="whatchanged --i-still-use-this" &&
+
git log --abbrev-commit >expect.log.abbrev &&
git log --no-abbrev-commit >expect.log.full &&
git log --pretty=raw >expect.log.raw &&
git reflog --abbrev-commit >expect.reflog.abbrev &&
git reflog --no-abbrev-commit >expect.reflog.full &&
- git whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
- git whatchanged --no-abbrev-commit >expect.whatchanged.full &&
+ git $whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
+ git $whatchanged --no-abbrev-commit >expect.whatchanged.full &&
test_config log.abbrevCommit true &&
@@ -1231,9 +1235,9 @@ test_expect_success 'log.abbrevCommit configuration' '
git reflog --no-abbrev-commit >actual &&
test_cmp expect.reflog.full actual &&
- git whatchanged >actual &&
+ git $whatchanged >actual &&
test_cmp expect.whatchanged.abbrev actual &&
- git whatchanged --no-abbrev-commit >actual &&
+ git $whatchanged --no-abbrev-commit >actual &&
test_cmp expect.whatchanged.full actual
'
--
2.49.0-601-ga5925c3955
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [PATCH v3 4/6] whatchanged: require --i-still-use-this
2025-05-03 0:58 ` [PATCH v3 4/6] whatchanged: require --i-still-use-this Junio C Hamano
@ 2025-05-05 6:56 ` Patrick Steinhardt
2025-05-05 20:49 ` Junio C Hamano
0 siblings, 1 reply; 39+ messages in thread
From: Patrick Steinhardt @ 2025-05-05 6:56 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Fri, May 02, 2025 at 05:58:12PM -0700, Junio C Hamano wrote:
> The documentation of "git whatchanged" is pretty explicit that this
> has retained for historical reasons to help those whose fingers
I feel like there's a word missing here. Maybe "that this command has
been retained"?
> cannot be retrained. Let's see if they still are finding it hard to
> type "git log --raw" instead of "git whatchanged" by marking the
> command as "nominated for removal", and require "--i-still-use-this"
> on the command line. Adjust the tests so that the option is passed
> when we invoke the command. In addition, we test that the command
> fails when "--i-still-use-this" is not given.
>
> While at it, update the documentation page to use the new [synopsis]
> facility to mark-up the SYNOPSIS part.
This while-at-it change feels a bit funny given that we don't touch the
docs at all, but I don't mind it too much.
Patrick
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH v3 4/6] whatchanged: require --i-still-use-this
2025-05-05 6:56 ` Patrick Steinhardt
@ 2025-05-05 20:49 ` Junio C Hamano
0 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-05 20:49 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: git
Patrick Steinhardt <ps@pks.im> writes:
>> While at it, update the documentation page to use the new [synopsis]
>> facility to mark-up the SYNOPSIS part.
>
> This while-at-it change feels a bit funny given that we don't touch the
> docs at all, but I don't mind it too much.
Yeah, that exactly was what I was thinking while rereading the
patches. I think it may make a better organization to delay it till
the very end where we do add new material to the file.
Thanks.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [PATCH v3 5/6] whatchanged: remove when built with WITH_BREAKING_CHANGES
2025-05-03 0:58 ` [PATCH v3 0/6] " Junio C Hamano
` (3 preceding siblings ...)
2025-05-03 0:58 ` [PATCH v3 4/6] whatchanged: require --i-still-use-this Junio C Hamano
@ 2025-05-03 0:58 ` Junio C Hamano
2025-05-05 6:56 ` Patrick Steinhardt
2025-05-03 0:58 ` [PATCH v3 6/6] whatschanged: list it in BreakingChanges document Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Junio C Hamano
6 siblings, 1 reply; 39+ messages in thread
From: Junio C Hamano @ 2025-05-03 0:58 UTC (permalink / raw)
To: git
As we made "git whatchanged" require "--i-still-use-this" and asked
the users to report if they still want to use it, the logical next
step is to allow us build Git without "whatchanged" to prepare for
its eventual removal.
If we were to follow the pattern established in 8ccc75c2 (remote:
announce removal of "branches/" and "remotes/", 2025-01-22), we can
do this together with the documentation update to officially list
that the command will be removed in the BreakingChanges document,
but let's just keep the changes separate just in case we want to
proceed a bit slower.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/config/format.adoc | 6 +++++
Documentation/config/log.adoc | 11 ++++++--
Documentation/pretty-options.adoc | 5 ++++
Documentation/rev-list-options.adoc | 9 +++++--
Documentation/technical/sparse-checkout.adoc | 2 +-
builtin/log.c | 6 +++++
git.c | 2 ++
t/t4013-diff-various.sh | 12 +++++++--
t/t4202-log.sh | 28 ++++++++++++++------
9 files changed, 66 insertions(+), 15 deletions(-)
diff --git a/Documentation/config/format.adoc b/Documentation/config/format.adoc
index 7410e930e5..ab0710e86a 100644
--- a/Documentation/config/format.adoc
+++ b/Documentation/config/format.adoc
@@ -68,9 +68,15 @@ format.encodeEmailHeaders::
Defaults to true.
format.pretty::
+ifndef::with-breaking-changes[]
The default pretty format for log/show/whatchanged command.
See linkgit:git-log[1], linkgit:git-show[1],
linkgit:git-whatchanged[1].
+endif::with-breaking-changes[]
+ifdef::with-breaking-changes[]
+ The default pretty format for log/show command.
+ See linkgit:git-log[1], linkgit:git-show[1].
+endif::with-breaking-changes[]
format.thread::
The default threading style for 'git format-patch'. Can be
diff --git a/Documentation/config/log.adoc b/Documentation/config/log.adoc
index 9003a82191..a9b160e7de 100644
--- a/Documentation/config/log.adoc
+++ b/Documentation/config/log.adoc
@@ -1,6 +1,13 @@
log.abbrevCommit::
- If true, makes linkgit:git-log[1], linkgit:git-show[1], and
- linkgit:git-whatchanged[1] assume `--abbrev-commit`. You may
+ If true, makes
+ifndef::with-breaking-changes[]
+ linkgit:git-log[1], linkgit:git-show[1], and
+ linkgit:git-whatchanged[1]
+endif::with-breaking-changes[]
+ifdef::with-breaking-changes[]
+ linkgit:git-log[1] and linkgit:git-show[1]
+endif::with-breaking-changes[]
+ assume `--abbrev-commit`. You may
override this option with `--no-abbrev-commit`.
log.date::
diff --git a/Documentation/pretty-options.adoc b/Documentation/pretty-options.adoc
index 23888cd612..b36e96abe2 100644
--- a/Documentation/pretty-options.adoc
+++ b/Documentation/pretty-options.adoc
@@ -62,7 +62,12 @@ ifndef::git-rev-list[]
--notes[=<ref>]::
Show the notes (see linkgit:git-notes[1]) that annotate the
commit, when showing the commit log message. This is the default
+ifndef::with-breaking-changes[]
for `git log`, `git show` and `git whatchanged` commands when
+endif::with-breaking-changes[]
+ifdef::with-breaking-changes[]
+ for `git log` and `git show` commands when
+endif::with-breaking-changes[]
there is no `--pretty`, `--format`, or `--oneline` option given
on the command line.
+
diff --git a/Documentation/rev-list-options.adoc b/Documentation/rev-list-options.adoc
index 785c0786e0..ee5c5c9489 100644
--- a/Documentation/rev-list-options.adoc
+++ b/Documentation/rev-list-options.adoc
@@ -1074,8 +1074,13 @@ Commit Formatting
ifdef::git-rev-list[]
Using these options, linkgit:git-rev-list[1] will act similar to the
-more specialized family of commit log tools: linkgit:git-log[1],
-linkgit:git-show[1], and linkgit:git-whatchanged[1]
+more specialized family of commit log tools:
+ifndef::with-breaking-changes[]
+linkgit:git-log[1], linkgit:git-show[1], and linkgit:git-whatchanged[1].
+endif::with-breaking-changes[]
+ifdef::with-breaking-changes[]
+linkgit:git-log[1] and linkgit:git-show[1].
+endif::with-breaking-changes[]
endif::git-rev-list[]
include::pretty-options.adoc[]
diff --git a/Documentation/technical/sparse-checkout.adoc b/Documentation/technical/sparse-checkout.adoc
index d968659354..67134bb768 100644
--- a/Documentation/technical/sparse-checkout.adoc
+++ b/Documentation/technical/sparse-checkout.adoc
@@ -442,7 +442,7 @@ understanding these differences can be beneficial.
* blame (only matters when one or more -C flags are passed)
* and annotate
* log
- * whatchanged
+ * whatchanged (may not exist anymore)
* ls-files
* diff-index
* diff-tree
diff --git a/builtin/log.c b/builtin/log.c
index 0f98ac8a34..1d0ae645ab 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -114,12 +114,14 @@ struct log_config {
char *fmt_pretty;
char *default_date_mode;
+#ifndef WITH_BREAKING_CHANGES
/*
* Note: git_log_config() does not touch this member and that
* is very deliberate. This member is only to be used to
* resurrect whatchanged that is deprecated.
*/
int i_still_use_this;
+#endif
};
static void log_config_init(struct log_config *cfg)
@@ -274,8 +276,10 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
OPT__QUIET(&quiet, N_("suppress diff output")),
OPT_BOOL(0, "source", &source, N_("show source")),
OPT_BOOL(0, "use-mailmap", &mailmap, N_("use mail map file")),
+#ifndef WITH_BREAKING_CHANGES
OPT_HIDDEN_BOOL(0, "i-still-use-this", &cfg->i_still_use_this,
"<use this deprecated command>"),
+#endif
OPT_ALIAS(0, "mailmap", "use-mailmap"),
OPT_CALLBACK_F(0, "clear-decorations", NULL, NULL,
N_("clear all previously-defined decoration filters"),
@@ -642,6 +646,7 @@ static int git_log_config(const char *var, const char *value,
return git_diff_ui_config(var, value, ctx, cb);
}
+#ifndef WITH_BREAKING_CHANGES
int cmd_whatchanged(int argc,
const char **argv,
const char *prefix,
@@ -678,6 +683,7 @@ int cmd_whatchanged(int argc,
log_config_release(&cfg);
return ret;
}
+#endif
static void show_tagger(const char *buf, struct rev_info *rev)
{
diff --git a/git.c b/git.c
index 450d6aaa86..b84db92cb5 100644
--- a/git.c
+++ b/git.c
@@ -645,7 +645,9 @@ static struct cmd_struct commands[] = {
{ "verify-pack", cmd_verify_pack },
{ "verify-tag", cmd_verify_tag, RUN_SETUP },
{ "version", cmd_version },
+#ifndef WITH_BREAKING_CHANGES
{ "whatchanged", cmd_whatchanged, RUN_SETUP },
+#endif
{ "worktree", cmd_worktree, RUN_SETUP },
{ "write-tree", cmd_write_tree, RUN_SETUP },
};
diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh
index 8caab2ee38..8e38df1685 100755
--- a/t/t4013-diff-various.sh
+++ b/t/t4013-diff-various.sh
@@ -200,7 +200,15 @@ do
expect="$TEST_DIRECTORY/t4013/diff.$test"
actual="$pfx-diff.$test"
- test_expect_success "git $cmd # magic is ${magic:-(not used)}" '
+ case "$cmd" in
+ whatchanged | whatchanged" "*)
+ prereq=WITHOUT_BREAKING_CHANGES
+ ;;
+ *)
+ prereq=;;
+ esac
+
+ test_expect_success $prereq "git $cmd # magic is ${magic:-(not used)}" '
{
echo "$ git $cmd"
@@ -462,7 +470,7 @@ diff-tree --stat --compact-summary initial mode
diff-tree -R --stat --compact-summary initial mode
EOF
-test_expect_success 'whatchanged needs --i-still-use-this' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'whatchanged needs --i-still-use-this' '
test_must_fail git whatchanged >message 2>&1 &&
test_grep "nominated for removal" message
'
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index ce4c7ab2af..ad05f6772f 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -486,7 +486,12 @@ test_expect_success !FAIL_PREREQS 'log with various grep.patternType configurati
)
'
-for cmd in show whatchanged reflog format-patch
+cmds="show reflog format-patch"
+if test_have_prereq WITHOUT_BREAKING_CHANGES
+then
+ cmds="$cmds whatchanged"
+fi
+for cmd in $cmds
do
case "$cmd" in
format-patch) myarg="HEAD~.." ;;
@@ -1202,7 +1207,7 @@ test_expect_success 'reflog is expected format' '
test_cmp expect actual
'
-test_expect_success 'whatchanged is expected format' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'whatchanged is expected format' '
whatchanged="whatchanged --i-still-use-this" &&
git log --no-merges --raw >expect &&
git $whatchanged >actual &&
@@ -1217,8 +1222,12 @@ test_expect_success 'log.abbrevCommit configuration' '
git log --pretty=raw >expect.log.raw &&
git reflog --abbrev-commit >expect.reflog.abbrev &&
git reflog --no-abbrev-commit >expect.reflog.full &&
- git $whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
- git $whatchanged --no-abbrev-commit >expect.whatchanged.full &&
+
+ if test_have_prereq WITHOUT_BREAKING_CHANGES
+ then
+ git $whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
+ git $whatchanged --no-abbrev-commit >expect.whatchanged.full
+ fi &&
test_config log.abbrevCommit true &&
@@ -1235,10 +1244,13 @@ test_expect_success 'log.abbrevCommit configuration' '
git reflog --no-abbrev-commit >actual &&
test_cmp expect.reflog.full actual &&
- git $whatchanged >actual &&
- test_cmp expect.whatchanged.abbrev actual &&
- git $whatchanged --no-abbrev-commit >actual &&
- test_cmp expect.whatchanged.full actual
+ if test_have_prereq WITHOUT_BREAKING_CHANGES
+ then
+ git $whatchanged >actual &&
+ test_cmp expect.whatchanged.abbrev actual &&
+ git $whatchanged --no-abbrev-commit >actual &&
+ test_cmp expect.whatchanged.full actual
+ fi
'
test_expect_success '--abbrev-commit with core.abbrev=false' '
--
2.49.0-601-ga5925c3955
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [PATCH v3 5/6] whatchanged: remove when built with WITH_BREAKING_CHANGES
2025-05-03 0:58 ` [PATCH v3 5/6] whatchanged: remove when built with WITH_BREAKING_CHANGES Junio C Hamano
@ 2025-05-05 6:56 ` Patrick Steinhardt
2025-05-05 20:57 ` Junio C Hamano
0 siblings, 1 reply; 39+ messages in thread
From: Patrick Steinhardt @ 2025-05-05 6:56 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Fri, May 02, 2025 at 05:58:13PM -0700, Junio C Hamano wrote:
> As we made "git whatchanged" require "--i-still-use-this" and asked
> the users to report if they still want to use it, the logical next
> step is to allow us build Git without "whatchanged" to prepare for
> its eventual removal.
>
> If we were to follow the pattern established in 8ccc75c2 (remote:
> announce removal of "branches/" and "remotes/", 2025-01-22), we can
> do this together with the documentation update to officially list
> that the command will be removed in the BreakingChanges document,
> but let's just keep the changes separate just in case we want to
> proceed a bit slower.
We'd also need to adjust Meson so that it doesn't install the
documentation anymore. So something like the below (untested) patch.
Patrick
diff --git a/Documentation/Makefile b/Documentation/Makefile
index b109d25e9c8..815b0334e53 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -510,7 +510,7 @@ lint-docs-meson:
awk "/^manpages = {$$/ {flag=1 ; next } /^}$$/ { flag=0 } flag { gsub(/^ \047/, \"\"); gsub(/\047 : [157],\$$/, \"\"); print }" meson.build | \
grep -v -e '#' -e '^$$' | \
sort >tmp-meson-diff/meson.adoc && \
- ls git*.adoc scalar.adoc | grep -v -e git-bisect-lk2009.adoc -e git-pack-redundant.adoc -e git-tools.adoc >tmp-meson-diff/actual.adoc && \
+ ls git*.adoc scalar.adoc | grep -v -e git-bisect-lk2009.adoc -e git-pack-redundant.adoc -e git-whatchanged.adoc -e git-tools.adoc >tmp-meson-diff/actual.adoc && \
if ! cmp tmp-meson-diff/meson.adoc tmp-meson-diff/actual.adoc; then \
echo "Meson man pages differ from actual man pages:"; \
diff -u tmp-meson-diff/meson.adoc tmp-meson-diff/actual.adoc; \
diff --git a/Documentation/meson.build b/Documentation/meson.build
index 1433acfd310..2fe1a1369d4 100644
--- a/Documentation/meson.build
+++ b/Documentation/meson.build
@@ -158,7 +158,6 @@ manpages = {
'git-verify-tag.adoc' : 1,
'git-version.adoc' : 1,
'git-web--browse.adoc' : 1,
- 'git-whatchanged.adoc' : 1,
'git-worktree.adoc' : 1,
'git-write-tree.adoc' : 1,
'git.adoc' : 1,
@@ -207,6 +206,7 @@ manpages = {
manpages_breaking_changes = {
'git-pack-redundant.adoc' : 1,
+ 'git-whatchanged.adoc' : 1,
}
if not get_option('breaking_changes')
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [PATCH v3 5/6] whatchanged: remove when built with WITH_BREAKING_CHANGES
2025-05-05 6:56 ` Patrick Steinhardt
@ 2025-05-05 20:57 ` Junio C Hamano
0 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-05 20:57 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: git
Patrick Steinhardt <ps@pks.im> writes:
> On Fri, May 02, 2025 at 05:58:13PM -0700, Junio C Hamano wrote:
>> As we made "git whatchanged" require "--i-still-use-this" and asked
>> the users to report if they still want to use it, the logical next
>> step is to allow us build Git without "whatchanged" to prepare for
>> its eventual removal.
>>
>> If we were to follow the pattern established in 8ccc75c2 (remote:
>> announce removal of "branches/" and "remotes/", 2025-01-22), we can
>> do this together with the documentation update to officially list
>> that the command will be removed in the BreakingChanges document,
>> but let's just keep the changes separate just in case we want to
>> proceed a bit slower.
>
> We'd also need to adjust Meson so that it doesn't install the
> documentation anymore. So something like the below (untested) patch.
Thanks.
> diff --git a/Documentation/Makefile b/Documentation/Makefile
> index b109d25e9c8..815b0334e53 100644
> --- a/Documentation/Makefile
> +++ b/Documentation/Makefile
> @@ -510,7 +510,7 @@ lint-docs-meson:
> awk "/^manpages = {$$/ {flag=1 ; next } /^}$$/ { flag=0 } flag { gsub(/^ \047/, \"\"); gsub(/\047 : [157],\$$/, \"\"); print }" meson.build | \
> grep -v -e '#' -e '^$$' | \
> sort >tmp-meson-diff/meson.adoc && \
> - ls git*.adoc scalar.adoc | grep -v -e git-bisect-lk2009.adoc -e git-pack-redundant.adoc -e git-tools.adoc >tmp-meson-diff/actual.adoc && \
> + ls git*.adoc scalar.adoc | grep -v -e git-bisect-lk2009.adoc -e git-pack-redundant.adoc -e git-whatchanged.adoc -e git-tools.adoc >tmp-meson-diff/actual.adoc && \
Yuck.
> diff --git a/Documentation/meson.build b/Documentation/meson.build
> index 1433acfd310..2fe1a1369d4 100644
> --- a/Documentation/meson.build
> +++ b/Documentation/meson.build
> @@ -158,7 +158,6 @@ manpages = {
> 'git-verify-tag.adoc' : 1,
> 'git-version.adoc' : 1,
> 'git-web--browse.adoc' : 1,
> - 'git-whatchanged.adoc' : 1,
> 'git-worktree.adoc' : 1,
> 'git-write-tree.adoc' : 1,
> 'git.adoc' : 1,
> @@ -207,6 +206,7 @@ manpages = {
>
> manpages_breaking_changes = {
> 'git-pack-redundant.adoc' : 1,
> + 'git-whatchanged.adoc' : 1,
> }
OK.
Thanks.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [PATCH v3 6/6] whatschanged: list it in BreakingChanges document
2025-05-03 0:58 ` [PATCH v3 0/6] " Junio C Hamano
` (4 preceding siblings ...)
2025-05-03 0:58 ` [PATCH v3 5/6] whatchanged: remove when built with WITH_BREAKING_CHANGES Junio C Hamano
@ 2025-05-03 0:58 ` Junio C Hamano
2025-05-12 17:36 ` Elijah Newren
2025-05-12 19:03 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Junio C Hamano
6 siblings, 1 reply; 39+ messages in thread
From: Junio C Hamano @ 2025-05-03 0:58 UTC (permalink / raw)
To: git
This can be squashed into the previous step. That is how our "git
pack-redundant" conversion did.
Theoretically, however, those who want to gauge the need to keep the
command by exposing their users to patches before this one may want
to wait until their experiment finishes before they formally say
"this will go away".
This change is made into a separate patch from the previous step
precisely to help those folks.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/BreakingChanges.adoc | 9 +++++++++
Documentation/git-whatchanged.adoc | 6 ++++++
2 files changed, 15 insertions(+)
diff --git a/Documentation/BreakingChanges.adoc b/Documentation/BreakingChanges.adoc
index bdfad29d8a..f9026d004c 100644
--- a/Documentation/BreakingChanges.adoc
+++ b/Documentation/BreakingChanges.adoc
@@ -178,6 +178,15 @@ references.
+
These features will be removed.
+* The git-whatchanged(1) command has outlived its usefulness more than
+ 10 years ago, and takes more keystrokes to type than its rough
+ equivalent `git log --raw`. We have nominated the command for
+ removal, have changed the command to refuse to work unless the
+ `--i-still-use-this` option is given, and asked the users to report
+ when they do so. So far there hasn't been a single complaint.
++
+The command will be removed
+
== Superseded features that will not be deprecated
Some features have gained newer replacements that aim to improve the design in
diff --git a/Documentation/git-whatchanged.adoc b/Documentation/git-whatchanged.adoc
index d400b68d4b..d21484026f 100644
--- a/Documentation/git-whatchanged.adoc
+++ b/Documentation/git-whatchanged.adoc
@@ -11,6 +11,12 @@ SYNOPSIS
[synopsis]
git whatchanged <option>...
+WARNING
+-------
+`git whatchanged` has been deprecated and is scheduled for removal in
+a future version of Git, as it is merely `git log` with different
+default; `whatchanged` is not even shorter to type than `log --raw`.
+
DESCRIPTION
-----------
--
2.49.0-601-ga5925c3955
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [PATCH v3 6/6] whatschanged: list it in BreakingChanges document
2025-05-03 0:58 ` [PATCH v3 6/6] whatschanged: list it in BreakingChanges document Junio C Hamano
@ 2025-05-12 17:36 ` Elijah Newren
2025-05-12 18:35 ` Junio C Hamano
0 siblings, 1 reply; 39+ messages in thread
From: Elijah Newren @ 2025-05-12 17:36 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Fri, May 2, 2025 at 5:59 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> This can be squashed into the previous step. That is how our "git
> pack-redundant" conversion did.
>
> Theoretically, however, those who want to gauge the need to keep the
> command by exposing their users to patches before this one may want
> to wait until their experiment finishes before they formally say
> "this will go away".
>
> This change is made into a separate patch from the previous step
> precisely to help those folks.
Were these three paragraphs intended to come after the "---" line, but
accidentally placed in the commit message?
>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> Documentation/BreakingChanges.adoc | 9 +++++++++
> Documentation/git-whatchanged.adoc | 6 ++++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/Documentation/BreakingChanges.adoc b/Documentation/BreakingChanges.adoc
> index bdfad29d8a..f9026d004c 100644
> --- a/Documentation/BreakingChanges.adoc
> +++ b/Documentation/BreakingChanges.adoc
> @@ -178,6 +178,15 @@ references.
> +
> These features will be removed.
>
> +* The git-whatchanged(1) command has outlived its usefulness more than
> + 10 years ago, and takes more keystrokes to type than its rough
> + equivalent `git log --raw`. We have nominated the command for
> + removal, have changed the command to refuse to work unless the
> + `--i-still-use-this` option is given, and asked the users to report
> + when they do so. So far there hasn't been a single complaint.
> ++
> +The command will be removed
Missing period at the end of this sentence?
> +
> == Superseded features that will not be deprecated
>
> Some features have gained newer replacements that aim to improve the design in
> diff --git a/Documentation/git-whatchanged.adoc b/Documentation/git-whatchanged.adoc
> index d400b68d4b..d21484026f 100644
> --- a/Documentation/git-whatchanged.adoc
> +++ b/Documentation/git-whatchanged.adoc
> @@ -11,6 +11,12 @@ SYNOPSIS
> [synopsis]
> git whatchanged <option>...
>
> +WARNING
> +-------
> +`git whatchanged` has been deprecated and is scheduled for removal in
> +a future version of Git, as it is merely `git log` with different
> +default; `whatchanged` is not even shorter to type than `log --raw`.
> +
> DESCRIPTION
> -----------
>
> --
> 2.49.0-601-ga5925c3955
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH v3 6/6] whatschanged: list it in BreakingChanges document
2025-05-12 17:36 ` Elijah Newren
@ 2025-05-12 18:35 ` Junio C Hamano
0 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-12 18:35 UTC (permalink / raw)
To: Elijah Newren; +Cc: git
Elijah Newren <newren@gmail.com> writes:
> On Fri, May 2, 2025 at 5:59 PM Junio C Hamano <gitster@pobox.com> wrote:
>>
>> This can be squashed into the previous step. That is how our "git
>> pack-redundant" conversion did.
>>
>> Theoretically, however, those who want to gauge the need to keep the
>> command by exposing their users to patches before this one may want
>> to wait until their experiment finishes before they formally say
>> "this will go away".
>>
>> This change is made into a separate patch from the previous step
>> precisely to help those folks.
>
> Were these three paragraphs intended to come after the "---" line, but
> accidentally placed in the commit message?
They are indeed meant above the "---" line to explain why this one
is separate.
>> +* The git-whatchanged(1) command has outlived its usefulness more than
>> + 10 years ago, and takes more keystrokes to type than its rough
>> + equivalent `git log --raw`. We have nominated the command for
>> + removal, have changed the command to refuse to work unless the
>> + `--i-still-use-this` option is given, and asked the users to report
>> + when they do so. So far there hasn't been a single complaint.
>> ++
>> +The command will be removed
>
> Missing period at the end of this sentence?
Indeed.
Thanks.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [PATCH v4 0/6] Nominating "whatchanged" for removal
2025-05-03 0:58 ` [PATCH v3 0/6] " Junio C Hamano
` (5 preceding siblings ...)
2025-05-03 0:58 ` [PATCH v3 6/6] whatschanged: list it in BreakingChanges document Junio C Hamano
@ 2025-05-12 19:03 ` Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 1/6] you-still-use-that??: help deprecating commands " Junio C Hamano
` (6 more replies)
6 siblings, 7 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-12 19:03 UTC (permalink / raw)
To: git
"git whatchanged" has outlived its usefulness when "git log" with
various diff-related options more than 10 years ago. It is not even
shorter to type than its rough equivalent "git log --raw". It is
high time to start seeing if it is still being used, declare its
official deprecation, and announce its removal in the future.
This iteration is more complete than the previous two iterations:
* The first step is to refactor the mechanism to show the message
to ask users to contact git@vger that they still use the command,
out of "git pack-redundant" implementation. This message is
shown when the "--i-still-use-this" option is not passed to a
command that requires it.
* The second and the third step are to remove unnecessary mentions
of "whatchanged" from our documentation and tests. With these,
we have fewer places that we need to adjust when the command gets
truly removed.
* Then we start to require that the "--i-still-use-this" option is
passed from the command line. This requires adjustment for tests
that protect the behaviour of the command, as they must now pass
the required option just like end-users.
* The last two steps are for a future. In order to make sure that
we can cleanly ditch the feature at some future date by removing
it from the build, test, and documentation when Git is built with
WITH_BREAKING_CHANGES. And finally we add "whatchanged" to the
list of features to be removed in the BreakingChanges document.
This iteration incorporates updated log messages, and a missing
period in the documentation, helped by Elijah.
Junio C Hamano (6):
you-still-use-that??: help deprecating commands for removal
doc: prepare for a world without whatchanged
tests: prepare for a world without whatchanged
whatchanged: require --i-still-use-this
whatchanged: remove when built with WITH_BREAKING_CHANGES
whatschanged: list it in BreakingChanges document
Documentation/BreakingChanges.adoc | 9 ++++++
Documentation/MyFirstObjectWalk.adoc | 4 +--
Documentation/config/format.adoc | 6 ++++
Documentation/config/log.adoc | 11 +++++--
Documentation/git-whatchanged.adoc | 10 ++++--
Documentation/pretty-options.adoc | 5 +++
Documentation/rev-list-options.adoc | 9 ++++--
Documentation/technical/sparse-checkout.adoc | 2 +-
Documentation/user-manual.adoc | 2 +-
builtin/log.c | 19 +++++++++++
builtin/pack-redundant.c | 10 ++----
git-compat-util.h | 2 ++
git.c | 2 ++
t/t4013-diff-various.sh | 27 ++++++++++++++--
t/t4202-log.sh | 34 ++++++++++++++------
t/t5323-pack-redundant.sh | 5 +++
t/t9300-fast-import.sh | 12 +++----
t/t9301-fast-import-notes.sh | 2 +-
usage.c | 12 +++++++
19 files changed, 146 insertions(+), 37 deletions(-)
Range-diff against v3:
1: a43a2ffdab ! 1: fedbc30d0e you-still-use-that??: help deprecating commands for removal
@@ Metadata
## Commit message ##
you-still-use-that??: help deprecating commands for removal
- A command slated for removal like "git pack-redundant" gains a
- command line option "--i-still-use-this", and refuses to work when
- the option is not given. The message and the instruction upon
- seeing what to do are both rather long, so before letting another
- command to use the same mechanism, factor out the message+die part
- into a small helper function, and use that.
+ Commands slated for removal like "git pack-redundant" now require
+ an explicit "--i-still-use-this" option to run. This is to
+ discourage casual use and surface their pending deprecation to
+ users.
- The existing pack-redundant test lacked a test to make sure that we
- require the --i-still-use-this option. Add one while we are at it.
+ The warning message is long, so factor it into a helper function
+ you_still_use_that() to simplify reuse by other commands.
+
+ Also add a missing test to ensure this enforcement works for
+ "pack-redundant".
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2: 16ccf7d92e ! 2: 7a3897acca doc: prepare for a world without whatchanged
@@ Metadata
## Commit message ##
doc: prepare for a world without whatchanged
- These documents mention "whatchanged" as an example, that can be
- substituted by something else. A new hypothetical command "walken"
- would come near "whatchanged" but since the latter may be going
- away, we can say it would come near "version", as the fictitious
- command sorts between them. Similarly, we do not have to use
- "whatchanged" as an example of a subcommand that is also implemented
- in builtin/log.c file; we can instead mention "show".
-
- Both of these changes allow us not to worry about adjusting these
- places when "whatchanged" is finally removed.
+ Some documentation examples reference "whatchanged", either as a
+ placeholder command or an example of source structure.
+
+ To reduce the need for future edits when `whatchanged` is removed,
+ replace these references with alternatives:
+
+ - In `MyFirstObjectWalk.adoc`, use `version` as the nearby anchor
+ point for `walken`, instead of `whatchanged`.
+
+ - In `user-manual.adoc`, cite `show` instead of `whatchanged` as
+ a command whose source lives in the same file as `log`.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3: 6951fb8cef ! 3: f696eed84b tests: prepare for a world without whatchanged
@@ Commit message
Some tests on fast-import run "git whatchanged" without even
checking the output from the command. It is tempting to remove the
calls altogether since they are not doing anything useful, but they
- presumably were placed while the tests were developed to manually
+ presumably were added there while the tests were developed to manually
sanity check which paths were touched.
Replace these calls with "git log --raw", which is a rough
4: 2775f628c3 = 4: 01d4ed9acd whatchanged: require --i-still-use-this
5: b3d4d1f46a = 5: a7aca55d5d whatchanged: remove when built with WITH_BREAKING_CHANGES
6: 7c89054731 ! 6: 9d60f38d2f whatschanged: list it in BreakingChanges document
@@ Documentation/BreakingChanges.adoc: references.
+ `--i-still-use-this` option is given, and asked the users to report
+ when they do so. So far there hasn't been a single complaint.
++
-+The command will be removed
++The command will be removed.
+
== Superseded features that will not be deprecated
--
2.49.0-674-gc1e4f99c0b
^ permalink raw reply [flat|nested] 39+ messages in thread
* [PATCH v4 1/6] you-still-use-that??: help deprecating commands for removal
2025-05-12 19:03 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Junio C Hamano
@ 2025-05-12 19:03 ` Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 2/6] doc: prepare for a world without whatchanged Junio C Hamano
` (5 subsequent siblings)
6 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-12 19:03 UTC (permalink / raw)
To: git; +Cc: Elijah Newren
Commands slated for removal like "git pack-redundant" now require
an explicit "--i-still-use-this" option to run. This is to
discourage casual use and surface their pending deprecation to
users.
The warning message is long, so factor it into a helper function
you_still_use_that() to simplify reuse by other commands.
Also add a missing test to ensure this enforcement works for
"pack-redundant".
Helped-by: Elijah Newren <newren@gmail.com>
[en: log message]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
builtin/pack-redundant.c | 10 ++--------
git-compat-util.h | 2 ++
t/t5323-pack-redundant.sh | 5 +++++
usage.c | 12 ++++++++++++
4 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
index 3febe732f8..6dc9e020c7 100644
--- a/builtin/pack-redundant.c
+++ b/builtin/pack-redundant.c
@@ -625,14 +625,8 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix UNUSED, s
break;
}
- if (!i_still_use_this) {
- fputs(_("'git pack-redundant' is nominated for removal.\n"
- "If you still use this command, please add an extra\n"
- "option, '--i-still-use-this', on the command line\n"
- "and let us know you still use it by sending an e-mail\n"
- "to <git@vger.kernel.org>. Thanks.\n"), stderr);
- die(_("refusing to run without --i-still-use-this"));
- }
+ if (!i_still_use_this)
+ you_still_use_that("git pack-redundant");
if (load_all_packs)
load_all();
diff --git a/git-compat-util.h b/git-compat-util.h
index e123288e8f..21cab99567 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -703,6 +703,8 @@ void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
void show_usage_if_asked(int ac, const char **av, const char *err);
+NORETURN void you_still_use_that(const char *command_name);
+
#ifndef NO_OPENSSL
#ifdef APPLE_COMMON_CRYPTO
#include "compat/apple-common-crypto.h"
diff --git a/t/t5323-pack-redundant.sh b/t/t5323-pack-redundant.sh
index 688cd9706c..f2f20cfa40 100755
--- a/t/t5323-pack-redundant.sh
+++ b/t/t5323-pack-redundant.sh
@@ -45,6 +45,11 @@ fi
main_repo=main.git
shared_repo=shared.git
+test_expect_success 'pack-redundant needs --i-still-use-this' '
+ test_must_fail git pack-redundant >message 2>&1 &&
+ test_grep "nominated for removal" message
+'
+
git_pack_redundant='git pack-redundant --i-still-use-this'
# Create commits in <repo> and assign each commit's oid to shell variables
diff --git a/usage.c b/usage.c
index 38b46bbbfe..4aaad2b553 100644
--- a/usage.c
+++ b/usage.c
@@ -372,3 +372,15 @@ void bug_fl(const char *file, int line, const char *fmt, ...)
trace2_cmd_error_va(fmt, ap);
va_end(ap);
}
+
+NORETURN void you_still_use_that(const char *command_name)
+{
+ fprintf(stderr,
+ _("'%s' is nominated for removal.\n"
+ "If you still use this command, please add an extra\n"
+ "option, '--i-still-use-this', on the command line\n"
+ "and let us know you still use it by sending an e-mail\n"
+ "to <git@vger.kernel.org>. Thanks.\n"),
+ command_name);
+ die(_("refusing to run without --i-still-use-this"));
+}
--
2.49.0-674-gc1e4f99c0b
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH v4 2/6] doc: prepare for a world without whatchanged
2025-05-12 19:03 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 1/6] you-still-use-that??: help deprecating commands " Junio C Hamano
@ 2025-05-12 19:03 ` Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 3/6] tests: " Junio C Hamano
` (4 subsequent siblings)
6 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-12 19:03 UTC (permalink / raw)
To: git; +Cc: Elijah Newren
Some documentation examples reference "whatchanged", either as a
placeholder command or an example of source structure.
To reduce the need for future edits when `whatchanged` is removed,
replace these references with alternatives:
- In `MyFirstObjectWalk.adoc`, use `version` as the nearby anchor
point for `walken`, instead of `whatchanged`.
- In `user-manual.adoc`, cite `show` instead of `whatchanged` as
a command whose source lives in the same file as `log`.
Helped-by: Elijah Newren <newren@gmail.com>
[en: log message]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/MyFirstObjectWalk.adoc | 4 ++--
Documentation/user-manual.adoc | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Documentation/MyFirstObjectWalk.adoc b/Documentation/MyFirstObjectWalk.adoc
index d6e9dfdbbe..102a465a48 100644
--- a/Documentation/MyFirstObjectWalk.adoc
+++ b/Documentation/MyFirstObjectWalk.adoc
@@ -83,13 +83,13 @@ int cmd_walken(int argc, const char **argv, const char *prefix)
}
----
-Also add the relevant line in `builtin.h` near `cmd_whatchanged()`:
+Also add the relevant line in `builtin.h` near `cmd_version()`:
----
int cmd_walken(int argc, const char **argv, const char *prefix);
----
-Include the command in `git.c` in `commands[]` near the entry for `whatchanged`,
+Include the command in `git.c` in `commands[]` near the entry for `version`,
maintaining alphabetical ordering:
----
diff --git a/Documentation/user-manual.adoc b/Documentation/user-manual.adoc
index d2b478ad23..7124345966 100644
--- a/Documentation/user-manual.adoc
+++ b/Documentation/user-manual.adoc
@@ -4240,7 +4240,7 @@ command `git`. The source side of a builtin is
- an entry in `BUILTIN_OBJECTS` in the `Makefile`.
Sometimes, more than one builtin is contained in one source file. For
-example, `cmd_whatchanged()` and `cmd_log()` both reside in `builtin/log.c`,
+example, `cmd_show()` and `cmd_log()` both reside in `builtin/log.c`,
since they share quite a bit of code. In that case, the commands which are
_not_ named like the `.c` file in which they live have to be listed in
`BUILT_INS` in the `Makefile`.
--
2.49.0-674-gc1e4f99c0b
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH v4 3/6] tests: prepare for a world without whatchanged
2025-05-12 19:03 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 1/6] you-still-use-that??: help deprecating commands " Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 2/6] doc: prepare for a world without whatchanged Junio C Hamano
@ 2025-05-12 19:03 ` Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 4/6] whatchanged: require --i-still-use-this Junio C Hamano
` (3 subsequent siblings)
6 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-12 19:03 UTC (permalink / raw)
To: git; +Cc: Elijah Newren
Some tests on fast-import run "git whatchanged" without even
checking the output from the command. It is tempting to remove the
calls altogether since they are not doing anything useful, but they
presumably were added there while the tests were developed to manually
sanity check which paths were touched.
Replace these calls with "git log --raw", which is a rough
equivalent in the more modern Git.
This does not remove "git whatchanged", but we no longer have to
worry about adjusting these places when we eventually do.
Helped-by: Elijah Newren <newren@gmail.com>
[en: log message]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
t/t9300-fast-import.sh | 12 ++++++------
t/t9301-fast-import-notes.sh | 2 +-
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index b258dbf1df..4dc3d645bf 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
@@ -120,7 +120,7 @@ test_expect_success 'A: create pack from stdin' '
INPUT_END
git fast-import --export-marks=marks.out <input &&
- git whatchanged main
+ git log --raw main
'
test_expect_success 'A: verify pack' '
@@ -279,7 +279,7 @@ test_expect_success 'A: verify marks import does not crash' '
INPUT_END
git fast-import --import-marks=marks.out <input &&
- git whatchanged verify--import-marks
+ git log --raw verify--import-marks
'
test_expect_success 'A: verify pack' '
@@ -652,7 +652,7 @@ test_expect_success 'C: incremental import create pack from stdin' '
INPUT_END
git fast-import <input &&
- git whatchanged branch
+ git log --raw branch
'
test_expect_success 'C: verify pack' '
@@ -715,7 +715,7 @@ test_expect_success 'D: inline data in commit' '
INPUT_END
git fast-import <input &&
- git whatchanged branch
+ git log --raw branch
'
test_expect_success 'D: verify pack' '
@@ -882,7 +882,7 @@ test_expect_success 'H: deletall, add 1' '
INPUT_END
git fast-import <input &&
- git whatchanged H
+ git log --raw H
'
test_expect_success 'H: verify pack' '
@@ -2066,7 +2066,7 @@ test_expect_success 'Q: commit notes' '
INPUT_END
git fast-import <input &&
- git whatchanged notes-test
+ git log --raw notes-test
'
test_expect_success 'Q: verify pack' '
diff --git a/t/t9301-fast-import-notes.sh b/t/t9301-fast-import-notes.sh
index 1ae4d7c0d3..e62173cf1f 100755
--- a/t/t9301-fast-import-notes.sh
+++ b/t/t9301-fast-import-notes.sh
@@ -76,7 +76,7 @@ INPUT_END
test_expect_success 'set up main branch' '
git fast-import <input &&
- git whatchanged main
+ git log --raw main
'
commit4=$(git rev-parse refs/heads/main)
--
2.49.0-674-gc1e4f99c0b
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH v4 4/6] whatchanged: require --i-still-use-this
2025-05-12 19:03 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Junio C Hamano
` (2 preceding siblings ...)
2025-05-12 19:03 ` [PATCH v4 3/6] tests: " Junio C Hamano
@ 2025-05-12 19:03 ` Junio C Hamano
2025-05-14 13:38 ` Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 5/6] whatchanged: remove when built with WITH_BREAKING_CHANGES Junio C Hamano
` (2 subsequent siblings)
6 siblings, 1 reply; 39+ messages in thread
From: Junio C Hamano @ 2025-05-12 19:03 UTC (permalink / raw)
To: git
The documentation of "git whatchanged" is pretty explicit that this
has retained for historical reasons to help those whose fingers
cannot be retrained. Let's see if they still are finding it hard to
type "git log --raw" instead of "git whatchanged" by marking the
command as "nominated for removal", and require "--i-still-use-this"
on the command line. Adjust the tests so that the option is passed
when we invoke the command. In addition, we test that the command
fails when "--i-still-use-this" is not given.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
builtin/log.c | 13 +++++++++++++
t/t4013-diff-various.sh | 17 +++++++++++++++--
t/t4202-log.sh | 14 +++++++++-----
3 files changed, 37 insertions(+), 7 deletions(-)
diff --git a/builtin/log.c b/builtin/log.c
index 04a6ef97bc..0f98ac8a34 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -113,6 +113,13 @@ struct log_config {
int fmt_patch_name_max;
char *fmt_pretty;
char *default_date_mode;
+
+ /*
+ * Note: git_log_config() does not touch this member and that
+ * is very deliberate. This member is only to be used to
+ * resurrect whatchanged that is deprecated.
+ */
+ int i_still_use_this;
};
static void log_config_init(struct log_config *cfg)
@@ -267,6 +274,8 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
OPT__QUIET(&quiet, N_("suppress diff output")),
OPT_BOOL(0, "source", &source, N_("show source")),
OPT_BOOL(0, "use-mailmap", &mailmap, N_("use mail map file")),
+ OPT_HIDDEN_BOOL(0, "i-still-use-this", &cfg->i_still_use_this,
+ "<use this deprecated command>"),
OPT_ALIAS(0, "mailmap", "use-mailmap"),
OPT_CALLBACK_F(0, "clear-decorations", NULL, NULL,
N_("clear all previously-defined decoration filters"),
@@ -656,6 +665,10 @@ int cmd_whatchanged(int argc,
opt.def = "HEAD";
opt.revarg_opt = REVARG_COMMITTISH;
cmd_log_init(argc, argv, prefix, &rev, &opt, &cfg);
+
+ if (!cfg.i_still_use_this)
+ you_still_use_that("git whatchanged");
+
if (!rev.diffopt.output_format)
rev.diffopt.output_format = DIFF_FORMAT_RAW;
diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh
index 3855d68dbc..8caab2ee38 100755
--- a/t/t4013-diff-various.sh
+++ b/t/t4013-diff-various.sh
@@ -203,11 +203,19 @@ do
test_expect_success "git $cmd # magic is ${magic:-(not used)}" '
{
echo "$ git $cmd"
+
+ case "$cmd" in
+ whatchanged | whatchanged" "*)
+ run="whatchanged --i-still-use-this"
+ run="$run ${cmd#whatchanged}" ;;
+ *)
+ run=$cmd ;;
+ esac &&
case "$magic" in
"")
- GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
+ GIT_PRINT_SHA1_ELLIPSIS=yes git $run ;;
noellipses)
- git $cmd ;;
+ git $run ;;
esac |
sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
-e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
@@ -454,6 +462,11 @@ diff-tree --stat --compact-summary initial mode
diff-tree -R --stat --compact-summary initial mode
EOF
+test_expect_success 'whatchanged needs --i-still-use-this' '
+ test_must_fail git whatchanged >message 2>&1 &&
+ test_grep "nominated for removal" message
+'
+
test_expect_success 'log -m matches pure log' '
git log master >result &&
process_diffs result >expected &&
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index 51f7beb59f..ce4c7ab2af 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -490,6 +490,7 @@ for cmd in show whatchanged reflog format-patch
do
case "$cmd" in
format-patch) myarg="HEAD~.." ;;
+ whatchanged) myarg=--i-still-use-this ;;
*) myarg= ;;
esac
@@ -1202,19 +1203,22 @@ test_expect_success 'reflog is expected format' '
'
test_expect_success 'whatchanged is expected format' '
+ whatchanged="whatchanged --i-still-use-this" &&
git log --no-merges --raw >expect &&
- git whatchanged >actual &&
+ git $whatchanged >actual &&
test_cmp expect actual
'
test_expect_success 'log.abbrevCommit configuration' '
+ whatchanged="whatchanged --i-still-use-this" &&
+
git log --abbrev-commit >expect.log.abbrev &&
git log --no-abbrev-commit >expect.log.full &&
git log --pretty=raw >expect.log.raw &&
git reflog --abbrev-commit >expect.reflog.abbrev &&
git reflog --no-abbrev-commit >expect.reflog.full &&
- git whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
- git whatchanged --no-abbrev-commit >expect.whatchanged.full &&
+ git $whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
+ git $whatchanged --no-abbrev-commit >expect.whatchanged.full &&
test_config log.abbrevCommit true &&
@@ -1231,9 +1235,9 @@ test_expect_success 'log.abbrevCommit configuration' '
git reflog --no-abbrev-commit >actual &&
test_cmp expect.reflog.full actual &&
- git whatchanged >actual &&
+ git $whatchanged >actual &&
test_cmp expect.whatchanged.abbrev actual &&
- git whatchanged --no-abbrev-commit >actual &&
+ git $whatchanged --no-abbrev-commit >actual &&
test_cmp expect.whatchanged.full actual
'
--
2.49.0-674-gc1e4f99c0b
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [PATCH v4 4/6] whatchanged: require --i-still-use-this
2025-05-12 19:03 ` [PATCH v4 4/6] whatchanged: require --i-still-use-this Junio C Hamano
@ 2025-05-14 13:38 ` Junio C Hamano
0 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-14 13:38 UTC (permalink / raw)
To: git
Junio C Hamano <gitster@pobox.com> writes:
> The documentation of "git whatchanged" is pretty explicit that this
> has retained for historical reasons to help those whose fingers
In 731a2c7d (whatchanged: require --i-still-use-this, 2025-05-12),
the above has been rephrased to
The documentation of "git whatchanged" is pretty explicit that the
command was retained for historical reasons to help those whose fingers
I won't repost the whole series, though.
Thanks.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [PATCH v4 5/6] whatchanged: remove when built with WITH_BREAKING_CHANGES
2025-05-12 19:03 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Junio C Hamano
` (3 preceding siblings ...)
2025-05-12 19:03 ` [PATCH v4 4/6] whatchanged: require --i-still-use-this Junio C Hamano
@ 2025-05-12 19:03 ` Junio C Hamano
2025-05-12 19:03 ` [PATCH v4 6/6] whatschanged: list it in BreakingChanges document Junio C Hamano
2025-05-12 21:21 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Elijah Newren
6 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-12 19:03 UTC (permalink / raw)
To: git
As we made "git whatchanged" require "--i-still-use-this" and asked
the users to report if they still want to use it, the logical next
step is to allow us build Git without "whatchanged" to prepare for
its eventual removal.
If we were to follow the pattern established in 8ccc75c2 (remote:
announce removal of "branches/" and "remotes/", 2025-01-22), we can
do this together with the documentation update to officially list
that the command will be removed in the BreakingChanges document,
but let's just keep the changes separate just in case we want to
proceed a bit slower.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/config/format.adoc | 6 +++++
Documentation/config/log.adoc | 11 ++++++--
Documentation/pretty-options.adoc | 5 ++++
Documentation/rev-list-options.adoc | 9 +++++--
Documentation/technical/sparse-checkout.adoc | 2 +-
builtin/log.c | 6 +++++
git.c | 2 ++
t/t4013-diff-various.sh | 12 +++++++--
t/t4202-log.sh | 28 ++++++++++++++------
9 files changed, 66 insertions(+), 15 deletions(-)
diff --git a/Documentation/config/format.adoc b/Documentation/config/format.adoc
index 7410e930e5..ab0710e86a 100644
--- a/Documentation/config/format.adoc
+++ b/Documentation/config/format.adoc
@@ -68,9 +68,15 @@ format.encodeEmailHeaders::
Defaults to true.
format.pretty::
+ifndef::with-breaking-changes[]
The default pretty format for log/show/whatchanged command.
See linkgit:git-log[1], linkgit:git-show[1],
linkgit:git-whatchanged[1].
+endif::with-breaking-changes[]
+ifdef::with-breaking-changes[]
+ The default pretty format for log/show command.
+ See linkgit:git-log[1], linkgit:git-show[1].
+endif::with-breaking-changes[]
format.thread::
The default threading style for 'git format-patch'. Can be
diff --git a/Documentation/config/log.adoc b/Documentation/config/log.adoc
index 9003a82191..a9b160e7de 100644
--- a/Documentation/config/log.adoc
+++ b/Documentation/config/log.adoc
@@ -1,6 +1,13 @@
log.abbrevCommit::
- If true, makes linkgit:git-log[1], linkgit:git-show[1], and
- linkgit:git-whatchanged[1] assume `--abbrev-commit`. You may
+ If true, makes
+ifndef::with-breaking-changes[]
+ linkgit:git-log[1], linkgit:git-show[1], and
+ linkgit:git-whatchanged[1]
+endif::with-breaking-changes[]
+ifdef::with-breaking-changes[]
+ linkgit:git-log[1] and linkgit:git-show[1]
+endif::with-breaking-changes[]
+ assume `--abbrev-commit`. You may
override this option with `--no-abbrev-commit`.
log.date::
diff --git a/Documentation/pretty-options.adoc b/Documentation/pretty-options.adoc
index 23888cd612..b36e96abe2 100644
--- a/Documentation/pretty-options.adoc
+++ b/Documentation/pretty-options.adoc
@@ -62,7 +62,12 @@ ifndef::git-rev-list[]
--notes[=<ref>]::
Show the notes (see linkgit:git-notes[1]) that annotate the
commit, when showing the commit log message. This is the default
+ifndef::with-breaking-changes[]
for `git log`, `git show` and `git whatchanged` commands when
+endif::with-breaking-changes[]
+ifdef::with-breaking-changes[]
+ for `git log` and `git show` commands when
+endif::with-breaking-changes[]
there is no `--pretty`, `--format`, or `--oneline` option given
on the command line.
+
diff --git a/Documentation/rev-list-options.adoc b/Documentation/rev-list-options.adoc
index 785c0786e0..ee5c5c9489 100644
--- a/Documentation/rev-list-options.adoc
+++ b/Documentation/rev-list-options.adoc
@@ -1074,8 +1074,13 @@ Commit Formatting
ifdef::git-rev-list[]
Using these options, linkgit:git-rev-list[1] will act similar to the
-more specialized family of commit log tools: linkgit:git-log[1],
-linkgit:git-show[1], and linkgit:git-whatchanged[1]
+more specialized family of commit log tools:
+ifndef::with-breaking-changes[]
+linkgit:git-log[1], linkgit:git-show[1], and linkgit:git-whatchanged[1].
+endif::with-breaking-changes[]
+ifdef::with-breaking-changes[]
+linkgit:git-log[1] and linkgit:git-show[1].
+endif::with-breaking-changes[]
endif::git-rev-list[]
include::pretty-options.adoc[]
diff --git a/Documentation/technical/sparse-checkout.adoc b/Documentation/technical/sparse-checkout.adoc
index d968659354..67134bb768 100644
--- a/Documentation/technical/sparse-checkout.adoc
+++ b/Documentation/technical/sparse-checkout.adoc
@@ -442,7 +442,7 @@ understanding these differences can be beneficial.
* blame (only matters when one or more -C flags are passed)
* and annotate
* log
- * whatchanged
+ * whatchanged (may not exist anymore)
* ls-files
* diff-index
* diff-tree
diff --git a/builtin/log.c b/builtin/log.c
index 0f98ac8a34..1d0ae645ab 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -114,12 +114,14 @@ struct log_config {
char *fmt_pretty;
char *default_date_mode;
+#ifndef WITH_BREAKING_CHANGES
/*
* Note: git_log_config() does not touch this member and that
* is very deliberate. This member is only to be used to
* resurrect whatchanged that is deprecated.
*/
int i_still_use_this;
+#endif
};
static void log_config_init(struct log_config *cfg)
@@ -274,8 +276,10 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
OPT__QUIET(&quiet, N_("suppress diff output")),
OPT_BOOL(0, "source", &source, N_("show source")),
OPT_BOOL(0, "use-mailmap", &mailmap, N_("use mail map file")),
+#ifndef WITH_BREAKING_CHANGES
OPT_HIDDEN_BOOL(0, "i-still-use-this", &cfg->i_still_use_this,
"<use this deprecated command>"),
+#endif
OPT_ALIAS(0, "mailmap", "use-mailmap"),
OPT_CALLBACK_F(0, "clear-decorations", NULL, NULL,
N_("clear all previously-defined decoration filters"),
@@ -642,6 +646,7 @@ static int git_log_config(const char *var, const char *value,
return git_diff_ui_config(var, value, ctx, cb);
}
+#ifndef WITH_BREAKING_CHANGES
int cmd_whatchanged(int argc,
const char **argv,
const char *prefix,
@@ -678,6 +683,7 @@ int cmd_whatchanged(int argc,
log_config_release(&cfg);
return ret;
}
+#endif
static void show_tagger(const char *buf, struct rev_info *rev)
{
diff --git a/git.c b/git.c
index 450d6aaa86..b84db92cb5 100644
--- a/git.c
+++ b/git.c
@@ -645,7 +645,9 @@ static struct cmd_struct commands[] = {
{ "verify-pack", cmd_verify_pack },
{ "verify-tag", cmd_verify_tag, RUN_SETUP },
{ "version", cmd_version },
+#ifndef WITH_BREAKING_CHANGES
{ "whatchanged", cmd_whatchanged, RUN_SETUP },
+#endif
{ "worktree", cmd_worktree, RUN_SETUP },
{ "write-tree", cmd_write_tree, RUN_SETUP },
};
diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh
index 8caab2ee38..8e38df1685 100755
--- a/t/t4013-diff-various.sh
+++ b/t/t4013-diff-various.sh
@@ -200,7 +200,15 @@ do
expect="$TEST_DIRECTORY/t4013/diff.$test"
actual="$pfx-diff.$test"
- test_expect_success "git $cmd # magic is ${magic:-(not used)}" '
+ case "$cmd" in
+ whatchanged | whatchanged" "*)
+ prereq=WITHOUT_BREAKING_CHANGES
+ ;;
+ *)
+ prereq=;;
+ esac
+
+ test_expect_success $prereq "git $cmd # magic is ${magic:-(not used)}" '
{
echo "$ git $cmd"
@@ -462,7 +470,7 @@ diff-tree --stat --compact-summary initial mode
diff-tree -R --stat --compact-summary initial mode
EOF
-test_expect_success 'whatchanged needs --i-still-use-this' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'whatchanged needs --i-still-use-this' '
test_must_fail git whatchanged >message 2>&1 &&
test_grep "nominated for removal" message
'
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index ce4c7ab2af..ad05f6772f 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -486,7 +486,12 @@ test_expect_success !FAIL_PREREQS 'log with various grep.patternType configurati
)
'
-for cmd in show whatchanged reflog format-patch
+cmds="show reflog format-patch"
+if test_have_prereq WITHOUT_BREAKING_CHANGES
+then
+ cmds="$cmds whatchanged"
+fi
+for cmd in $cmds
do
case "$cmd" in
format-patch) myarg="HEAD~.." ;;
@@ -1202,7 +1207,7 @@ test_expect_success 'reflog is expected format' '
test_cmp expect actual
'
-test_expect_success 'whatchanged is expected format' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'whatchanged is expected format' '
whatchanged="whatchanged --i-still-use-this" &&
git log --no-merges --raw >expect &&
git $whatchanged >actual &&
@@ -1217,8 +1222,12 @@ test_expect_success 'log.abbrevCommit configuration' '
git log --pretty=raw >expect.log.raw &&
git reflog --abbrev-commit >expect.reflog.abbrev &&
git reflog --no-abbrev-commit >expect.reflog.full &&
- git $whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
- git $whatchanged --no-abbrev-commit >expect.whatchanged.full &&
+
+ if test_have_prereq WITHOUT_BREAKING_CHANGES
+ then
+ git $whatchanged --abbrev-commit >expect.whatchanged.abbrev &&
+ git $whatchanged --no-abbrev-commit >expect.whatchanged.full
+ fi &&
test_config log.abbrevCommit true &&
@@ -1235,10 +1244,13 @@ test_expect_success 'log.abbrevCommit configuration' '
git reflog --no-abbrev-commit >actual &&
test_cmp expect.reflog.full actual &&
- git $whatchanged >actual &&
- test_cmp expect.whatchanged.abbrev actual &&
- git $whatchanged --no-abbrev-commit >actual &&
- test_cmp expect.whatchanged.full actual
+ if test_have_prereq WITHOUT_BREAKING_CHANGES
+ then
+ git $whatchanged >actual &&
+ test_cmp expect.whatchanged.abbrev actual &&
+ git $whatchanged --no-abbrev-commit >actual &&
+ test_cmp expect.whatchanged.full actual
+ fi
'
test_expect_success '--abbrev-commit with core.abbrev=false' '
--
2.49.0-674-gc1e4f99c0b
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH v4 6/6] whatschanged: list it in BreakingChanges document
2025-05-12 19:03 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Junio C Hamano
` (4 preceding siblings ...)
2025-05-12 19:03 ` [PATCH v4 5/6] whatchanged: remove when built with WITH_BREAKING_CHANGES Junio C Hamano
@ 2025-05-12 19:03 ` Junio C Hamano
2025-05-12 21:21 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Elijah Newren
6 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-12 19:03 UTC (permalink / raw)
To: git; +Cc: Elijah Newren
This can be squashed into the previous step. That is how our "git
pack-redundant" conversion did.
Theoretically, however, those who want to gauge the need to keep the
command by exposing their users to patches before this one may want
to wait until their experiment finishes before they formally say
"this will go away".
This change is made into a separate patch from the previous step
precisely to help those folks.
While at it, update the documentation page to use the new [synopsis]
facility to mark-up the SYNOPSIS part.
Helped-by: Elijah Newren <newren@gmail.com>
[en: typofix]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/BreakingChanges.adoc | 9 +++++++++
Documentation/git-whatchanged.adoc | 10 ++++++++--
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/Documentation/BreakingChanges.adoc b/Documentation/BreakingChanges.adoc
index bdfad29d8a..ac9a84c17b 100644
--- a/Documentation/BreakingChanges.adoc
+++ b/Documentation/BreakingChanges.adoc
@@ -178,6 +178,15 @@ references.
+
These features will be removed.
+* The git-whatchanged(1) command has outlived its usefulness more than
+ 10 years ago, and takes more keystrokes to type than its rough
+ equivalent `git log --raw`. We have nominated the command for
+ removal, have changed the command to refuse to work unless the
+ `--i-still-use-this` option is given, and asked the users to report
+ when they do so. So far there hasn't been a single complaint.
++
+The command will be removed.
+
== Superseded features that will not be deprecated
Some features have gained newer replacements that aim to improve the design in
diff --git a/Documentation/git-whatchanged.adoc b/Documentation/git-whatchanged.adoc
index 8e55e0bb1e..d21484026f 100644
--- a/Documentation/git-whatchanged.adoc
+++ b/Documentation/git-whatchanged.adoc
@@ -8,8 +8,14 @@ git-whatchanged - Show logs with differences each commit introduces
SYNOPSIS
--------
-[verse]
-'git whatchanged' <option>...
+[synopsis]
+git whatchanged <option>...
+
+WARNING
+-------
+`git whatchanged` has been deprecated and is scheduled for removal in
+a future version of Git, as it is merely `git log` with different
+default; `whatchanged` is not even shorter to type than `log --raw`.
DESCRIPTION
-----------
--
2.49.0-674-gc1e4f99c0b
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [PATCH v4 0/6] Nominating "whatchanged" for removal
2025-05-12 19:03 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Junio C Hamano
` (5 preceding siblings ...)
2025-05-12 19:03 ` [PATCH v4 6/6] whatschanged: list it in BreakingChanges document Junio C Hamano
@ 2025-05-12 21:21 ` Elijah Newren
2025-05-12 22:42 ` Junio C Hamano
6 siblings, 1 reply; 39+ messages in thread
From: Elijah Newren @ 2025-05-12 21:21 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Mon, May 12, 2025 at 12:04 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> "git whatchanged" has outlived its usefulness when "git log" with
> various diff-related options more than 10 years ago. It is not even
> shorter to type than its rough equivalent "git log --raw". It is
> high time to start seeing if it is still being used, declare its
> official deprecation, and announce its removal in the future.
>
> This iteration is more complete than the previous two iterations:
>
> * The first step is to refactor the mechanism to show the message
> to ask users to contact git@vger that they still use the command,
> out of "git pack-redundant" implementation. This message is
> shown when the "--i-still-use-this" option is not passed to a
> command that requires it.
>
> * The second and the third step are to remove unnecessary mentions
> of "whatchanged" from our documentation and tests. With these,
> we have fewer places that we need to adjust when the command gets
> truly removed.
>
> * Then we start to require that the "--i-still-use-this" option is
> passed from the command line. This requires adjustment for tests
> that protect the behaviour of the command, as they must now pass
> the required option just like end-users.
>
> * The last two steps are for a future. In order to make sure that
> we can cleanly ditch the feature at some future date by removing
> it from the build, test, and documentation when Git is built with
> WITH_BREAKING_CHANGES. And finally we add "whatchanged" to the
> list of features to be removed in the BreakingChanges document.
>
> This iteration incorporates updated log messages, and a missing
> period in the documentation, helped by Elijah.
>
>
> Junio C Hamano (6):
> you-still-use-that??: help deprecating commands for removal
> doc: prepare for a world without whatchanged
> tests: prepare for a world without whatchanged
> whatchanged: require --i-still-use-this
> whatchanged: remove when built with WITH_BREAKING_CHANGES
> whatschanged: list it in BreakingChanges document
>
> Documentation/BreakingChanges.adoc | 9 ++++++
> Documentation/MyFirstObjectWalk.adoc | 4 +--
> Documentation/config/format.adoc | 6 ++++
> Documentation/config/log.adoc | 11 +++++--
> Documentation/git-whatchanged.adoc | 10 ++++--
> Documentation/pretty-options.adoc | 5 +++
> Documentation/rev-list-options.adoc | 9 ++++--
> Documentation/technical/sparse-checkout.adoc | 2 +-
> Documentation/user-manual.adoc | 2 +-
> builtin/log.c | 19 +++++++++++
> builtin/pack-redundant.c | 10 ++----
> git-compat-util.h | 2 ++
> git.c | 2 ++
> t/t4013-diff-various.sh | 27 ++++++++++++++--
> t/t4202-log.sh | 34 ++++++++++++++------
> t/t5323-pack-redundant.sh | 5 +++
> t/t9300-fast-import.sh | 12 +++----
> t/t9301-fast-import-notes.sh | 2 +-
> usage.c | 12 +++++++
> 19 files changed, 146 insertions(+), 37 deletions(-)
>
> Range-diff against v3:
The updates to patches 1-3 and patch 6 all look good, but...
> 4: 2775f628c3 = 4: 01d4ed9acd whatchanged: require --i-still-use-this
> 5: b3d4d1f46a = 5: a7aca55d5d whatchanged: remove when built with WITH_BREAKING_CHANGES
...I was surprised to see no changes to either patches 4 or 5. While
I didn't comment on those patches myself, Patrick did (and since he
already called out the missing word I also noticed, I just didn't call
it out again).
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH v4 0/6] Nominating "whatchanged" for removal
2025-05-12 21:21 ` [PATCH v4 0/6] Nominating "whatchanged" for removal Elijah Newren
@ 2025-05-12 22:42 ` Junio C Hamano
0 siblings, 0 replies; 39+ messages in thread
From: Junio C Hamano @ 2025-05-12 22:42 UTC (permalink / raw)
To: Elijah Newren; +Cc: git
Elijah Newren <newren@gmail.com> writes:
> The updates to patches 1-3 and patch 6 all look good, but...
>
>> 4: 2775f628c3 = 4: 01d4ed9acd whatchanged: require --i-still-use-this
>> 5: b3d4d1f46a = 5: a7aca55d5d whatchanged: remove when built with WITH_BREAKING_CHANGES
>
> ...I was surprised to see no changes to either patches 4 or 5. While
> I didn't comment on those patches myself, Patrick did (and since he
> already called out the missing word I also noticed, I just didn't call
> it out again).
The meson stuff did not exist in the codebase the topic was based
on, so it won't be squashed into any of these individual patches,
but if you take a look at
$ git show seen^{/^Merge.branch..jc/you-still}
using any of the recent tip of 'seen', you'll see these changes
applied as an evil merge to adjust the topic to an updated meson
machinery in the more recent codebase.
For other changes, "developped" was already fixed, but "the command
was retained" was missed, so I'll locally amend.
Thanks.
^ permalink raw reply [flat|nested] 39+ messages in thread