whatchanged: remove when built with WITH_BREAKING_CHANGES

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>
This commit is contained in:
Junio C Hamano
2025-05-12 12:03:10 -07:00
parent 731a2c7dda
commit 07572f220a
9 changed files with 66 additions and 15 deletions

View File

@@ -68,9 +68,15 @@ format.encodeEmailHeaders::
Defaults to true. Defaults to true.
format.pretty:: format.pretty::
ifndef::with-breaking-changes[]
The default pretty format for log/show/whatchanged command. The default pretty format for log/show/whatchanged command.
See linkgit:git-log[1], linkgit:git-show[1], See linkgit:git-log[1], linkgit:git-show[1],
linkgit:git-whatchanged[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:: format.thread::
The default threading style for 'git format-patch'. Can be The default threading style for 'git format-patch'. Can be

View File

@@ -1,6 +1,13 @@
log.abbrevCommit:: log.abbrevCommit::
If true, makes linkgit:git-log[1], linkgit:git-show[1], and If true, makes
linkgit:git-whatchanged[1] assume `--abbrev-commit`. You may 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`. override this option with `--no-abbrev-commit`.
log.date:: log.date::

View File

@@ -62,7 +62,12 @@ ifndef::git-rev-list[]
--notes[=<ref>]:: --notes[=<ref>]::
Show the notes (see linkgit:git-notes[1]) that annotate the Show the notes (see linkgit:git-notes[1]) that annotate the
commit, when showing the commit log message. This is the default 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 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 there is no `--pretty`, `--format`, or `--oneline` option given
on the command line. on the command line.
+ +

View File

@@ -1074,8 +1074,13 @@ Commit Formatting
ifdef::git-rev-list[] ifdef::git-rev-list[]
Using these options, linkgit:git-rev-list[1] will act similar to the Using these options, linkgit:git-rev-list[1] will act similar to the
more specialized family of commit log tools: linkgit:git-log[1], more specialized family of commit log tools:
linkgit:git-show[1], and linkgit:git-whatchanged[1] 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[] endif::git-rev-list[]
include::pretty-options.adoc[] include::pretty-options.adoc[]

View File

@@ -442,7 +442,7 @@ understanding these differences can be beneficial.
* blame (only matters when one or more -C flags are passed) * blame (only matters when one or more -C flags are passed)
* and annotate * and annotate
* log * log
* whatchanged * whatchanged (may not exist anymore)
* ls-files * ls-files
* diff-index * diff-index
* diff-tree * diff-tree

View File

@@ -114,12 +114,14 @@ struct log_config {
char *fmt_pretty; char *fmt_pretty;
char *default_date_mode; char *default_date_mode;
#ifndef WITH_BREAKING_CHANGES
/* /*
* Note: git_log_config() does not touch this member and that * Note: git_log_config() does not touch this member and that
* is very deliberate. This member is only to be used to * is very deliberate. This member is only to be used to
* resurrect whatchanged that is deprecated. * resurrect whatchanged that is deprecated.
*/ */
int i_still_use_this; int i_still_use_this;
#endif
}; };
static void log_config_init(struct log_config *cfg) 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__QUIET(&quiet, N_("suppress diff output")),
OPT_BOOL(0, "source", &source, N_("show source")), OPT_BOOL(0, "source", &source, N_("show source")),
OPT_BOOL(0, "use-mailmap", &mailmap, N_("use mail map file")), 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, OPT_HIDDEN_BOOL(0, "i-still-use-this", &cfg->i_still_use_this,
"<use this deprecated command>"), "<use this deprecated command>"),
#endif
OPT_ALIAS(0, "mailmap", "use-mailmap"), OPT_ALIAS(0, "mailmap", "use-mailmap"),
OPT_CALLBACK_F(0, "clear-decorations", NULL, NULL, OPT_CALLBACK_F(0, "clear-decorations", NULL, NULL,
N_("clear all previously-defined decoration filters"), 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); return git_diff_ui_config(var, value, ctx, cb);
} }
#ifndef WITH_BREAKING_CHANGES
int cmd_whatchanged(int argc, int cmd_whatchanged(int argc,
const char **argv, const char **argv,
const char *prefix, const char *prefix,
@@ -678,6 +683,7 @@ int cmd_whatchanged(int argc,
log_config_release(&cfg); log_config_release(&cfg);
return ret; return ret;
} }
#endif
static void show_tagger(const char *buf, struct rev_info *rev) static void show_tagger(const char *buf, struct rev_info *rev)
{ {

2
git.c
View File

@@ -645,7 +645,9 @@ static struct cmd_struct commands[] = {
{ "verify-pack", cmd_verify_pack }, { "verify-pack", cmd_verify_pack },
{ "verify-tag", cmd_verify_tag, RUN_SETUP }, { "verify-tag", cmd_verify_tag, RUN_SETUP },
{ "version", cmd_version }, { "version", cmd_version },
#ifndef WITH_BREAKING_CHANGES
{ "whatchanged", cmd_whatchanged, RUN_SETUP }, { "whatchanged", cmd_whatchanged, RUN_SETUP },
#endif
{ "worktree", cmd_worktree, RUN_SETUP }, { "worktree", cmd_worktree, RUN_SETUP },
{ "write-tree", cmd_write_tree, RUN_SETUP }, { "write-tree", cmd_write_tree, RUN_SETUP },
}; };

View File

@@ -200,7 +200,15 @@ do
expect="$TEST_DIRECTORY/t4013/diff.$test" expect="$TEST_DIRECTORY/t4013/diff.$test"
actual="$pfx-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" echo "$ git $cmd"
@@ -462,7 +470,7 @@ diff-tree --stat --compact-summary initial mode
diff-tree -R --stat --compact-summary initial mode diff-tree -R --stat --compact-summary initial mode
EOF 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_must_fail git whatchanged >message 2>&1 &&
test_grep "nominated for removal" message test_grep "nominated for removal" message
' '

View File

@@ -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 do
case "$cmd" in case "$cmd" in
format-patch) myarg="HEAD~.." ;; format-patch) myarg="HEAD~.." ;;
@@ -1202,7 +1207,7 @@ test_expect_success 'reflog is expected format' '
test_cmp expect actual 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" && whatchanged="whatchanged --i-still-use-this" &&
git log --no-merges --raw >expect && git log --no-merges --raw >expect &&
git $whatchanged >actual && git $whatchanged >actual &&
@@ -1217,8 +1222,12 @@ test_expect_success 'log.abbrevCommit configuration' '
git log --pretty=raw >expect.log.raw && git log --pretty=raw >expect.log.raw &&
git reflog --abbrev-commit >expect.reflog.abbrev && git reflog --abbrev-commit >expect.reflog.abbrev &&
git reflog --no-abbrev-commit >expect.reflog.full && 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 && test_config log.abbrevCommit true &&
@@ -1235,10 +1244,13 @@ test_expect_success 'log.abbrevCommit configuration' '
git reflog --no-abbrev-commit >actual && git reflog --no-abbrev-commit >actual &&
test_cmp expect.reflog.full actual && test_cmp expect.reflog.full actual &&
git $whatchanged >actual && if test_have_prereq WITHOUT_BREAKING_CHANGES
test_cmp expect.whatchanged.abbrev actual && then
git $whatchanged --no-abbrev-commit >actual && git $whatchanged >actual &&
test_cmp expect.whatchanged.full 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' ' test_expect_success '--abbrev-commit with core.abbrev=false' '