threads / discuss / 54588

Suppressing filter-branch warning

Subject: Suppressing filter-branch warning

## tl;dr

5 messages between Nov 6, 2020 and Nov 10, 2020.

replies: 4people: 4as markdown or json

Daniel Höpfl· Nov 6, 2020, 09:04 UTC · lore
Hello there,

What did you do before the bug happened? (Steps to reproduce your issue) git filter-branch -f --env-filter '' --tag-name-filter cat -- HEAD

What did you expect to happen? (Expected behavior) See below (difference).

What happened instead? (Actual behavior) When using git filter-branch, the following message is shown:

----------8<-----------------------------------------------------
WARNING: git-filter-branch has a glut of gotchas generating mangled history
         rewrites.  Hit Ctrl-C before proceeding to abort, then use an
         alternative filtering tool such as 'git filter-repo'
         (https://github.com/newren/git-filter-repo/) instead.  See the
         filter-branch manual page for more details; to squelch this warning,
         set FILTER_BRANCH_SQUELCH_WARNING=1.
----------8<-----------------------------------------------------
You can suppress this by setting the environment variable shown.
What's different between what you expected and what actually happened?

Normally, when git introduces this kind of change, there is a git config variable that one can set to suppress it. That way one has fine grade control when to suppress it (one repo only...globally).

Anything else you want to add:
-/-

Please review the rest of the bug report below. You can delete any lines you don't wish to share.

[System Info] git version: git version 2.29.0 cpu: x86_64 no commit associated with this build sizeof-long: 8 sizeof-size_t: 8 shell-path: /bin/sh uname: Linux 4.19.0-10-amd64 #1 SMP Debian 4.19.132-1 (2020-07-24) x86_64 compiler info: gnuc: 8.3 libc info: glibc: 2.28 $SHELL (typically, interactive shell): /bin/bash

Junio C Hamano· Nov 6, 2020, 18:06 UTC · re: Daniel Höpfl · lore

Re: Suppressing filter-branch warning

Daniel Höpfl <daniel@hoepfl.de> writes:
Show 27 quoted lines
> Hello there,
>
> What did you do before the bug happened? (Steps to reproduce your issue)
> git filter-branch -f --env-filter '' --tag-name-filter cat -- HEAD
>
> What did you expect to happen? (Expected behavior)
> See below (difference).
>
> What happened instead? (Actual behavior)
> When using git filter-branch, the following message is shown:
>
> ----------8<-----------------------------------------------------
> WARNING: git-filter-branch has a glut of gotchas generating mangled history
>         rewrites.  Hit Ctrl-C before proceeding to abort, then use an
>         alternative filtering tool such as 'git filter-repo'
>         (https://github.com/newren/git-filter-repo/) instead.  See the
>         filter-branch manual page for more details; to squelch this warning,
>         set FILTER_BRANCH_SQUELCH_WARNING=1.
> ----------8<-----------------------------------------------------
>
> You can suppress this by setting the environment variable shown.
>
> What's different between what you expected and what actually happened?
>
> Normally, when git introduces this kind of change, there is a
> git config variable that one can set to suppress it.
> That way one has fine grade control when to suppress it (one repo only...globally).

I think this comes from 9df53c5d (Recommend git-filter-repo instead of git-filter-branch, 2019-09-04).

FWIW, I personally do not think an environment is a worse choice over configuration variable in this particular case. The large scale rewriting of the entire history in the repository by its nature is an one-off operation that ought to happen only rarely, so a one-shot

	$ FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch ...

that reminds the user every time would be more appropriate than a configuration variable that has a more permanent squelching effect.

If it were a new command line option may have been even better, as an environment variable can be defined in .*rc and forgotten, but a command line option needs to be typed every time and would serve as a better reminder (yes, I know it can also be aliased away, so it may not make much practical difference either way).

But I'll let the author of the feature to comment.
Thanks.
Elijah Newren· Nov 6, 2020, 20:12 UTC · re: Junio C Hamano · lore

Re: Suppressing filter-branch warning

On Fri, Nov 6, 2020 at 10:06 AM Junio C Hamano <gitster@pobox.com> wrote:
Show 54 quoted lines
>
> Daniel Höpfl <daniel@hoepfl.de> writes:
>
> > Hello there,
> >
> > What did you do before the bug happened? (Steps to reproduce your issue)
> > git filter-branch -f --env-filter '' --tag-name-filter cat -- HEAD
> >
> > What did you expect to happen? (Expected behavior)
> > See below (difference).
> >
> > What happened instead? (Actual behavior)
> > When using git filter-branch, the following message is shown:
> >
> > ----------8<-----------------------------------------------------
> > WARNING: git-filter-branch has a glut of gotchas generating mangled history
> >         rewrites.  Hit Ctrl-C before proceeding to abort, then use an
> >         alternative filtering tool such as 'git filter-repo'
> >         (https://github.com/newren/git-filter-repo/) instead.  See the
> >         filter-branch manual page for more details; to squelch this warning,
> >         set FILTER_BRANCH_SQUELCH_WARNING=1.
> > ----------8<-----------------------------------------------------
> >
> > You can suppress this by setting the environment variable shown.
> >
> > What's different between what you expected and what actually happened?
> >
> > Normally, when git introduces this kind of change, there is a
> > git config variable that one can set to suppress it.
> > That way one has fine grade control when to suppress it (one repo only...globally).
>
> I think this comes from 9df53c5d (Recommend git-filter-repo instead
> of git-filter-branch, 2019-09-04).
>
> FWIW, I personally do not think an environment is a worse choice
> over configuration variable in this particular case.  The large
> scale rewriting of the entire history in the repository by its
> nature is an one-off operation that ought to happen only rarely,
> so a one-shot
>
>         $ FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch ...
>
> that reminds the user every time would be more appropriate than a
> configuration variable that has a more permanent squelching effect.
>
> If it were a new command line option may have been even better, as
> an environment variable can be defined in .*rc and forgotten, but a
> command line option needs to be typed every time and would serve as
> a better reminder (yes, I know it can also be aliased away, so it
> may not make much practical difference either way).
>
> But I'll let the author of the feature to comment.
>
> Thanks.

I agree with Junio that filter-branch's one-off nature means that not providing a configuration variable seems reasonable in this case. If someone else were to go to the effort of implementing some configuration option here, I wouldn't be that strongly against it, though I'd rather just let filter-branch lie dormant and stable.

A new command line option might have been better, but it didn't occur to me at the time this change was made and I hesitate to needlessly force people to adapt again.

Daniel Höpfl· Nov 10, 2020, 11:21 UTC · re: Elijah Newren · lore

Re: Suppressing filter-branch warning

Hallo Elijah,
On Fri, Nov 06, 2020 at 12:12:55PM -0800, Elijah Newren wrote:
Show 65 quoted lines
>On Fri, Nov 6, 2020 at 10:06 AM Junio C Hamano <gitster@pobox.com> wrote:
>>
>> Daniel Höpfl <daniel@hoepfl.de> writes:
>>
>> > Hello there,
>> >
>> > What did you do before the bug happened? (Steps to reproduce your issue)
>> > git filter-branch -f --env-filter '' --tag-name-filter cat -- HEAD
>> >
>> > What did you expect to happen? (Expected behavior)
>> > See below (difference).
>> >
>> > What happened instead? (Actual behavior)
>> > When using git filter-branch, the following message is shown:
>> >
>> > ----------8<-----------------------------------------------------
>> > WARNING: git-filter-branch has a glut of gotchas generating mangled history
>> >         rewrites.  Hit Ctrl-C before proceeding to abort, then use an
>> >         alternative filtering tool such as 'git filter-repo'
>> >         (https://github.com/newren/git-filter-repo/) instead.  See the
>> >         filter-branch manual page for more details; to squelch this warning,
>> >         set FILTER_BRANCH_SQUELCH_WARNING=1.
>> > ----------8<-----------------------------------------------------
>> >
>> > You can suppress this by setting the environment variable shown.
>> >
>> > What's different between what you expected and what actually happened?
>> >
>> > Normally, when git introduces this kind of change, there is a
>> > git config variable that one can set to suppress it.
>> > That way one has fine grade control when to suppress it (one repo only...globally).
>>
>> I think this comes from 9df53c5d (Recommend git-filter-repo instead
>> of git-filter-branch, 2019-09-04).
>>
>> FWIW, I personally do not think an environment is a worse choice
>> over configuration variable in this particular case.  The large
>> scale rewriting of the entire history in the repository by its
>> nature is an one-off operation that ought to happen only rarely,
>> so a one-shot
>>
>>         $ FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch ...
>>
>> that reminds the user every time would be more appropriate than a
>> configuration variable that has a more permanent squelching effect.
>>
>> If it were a new command line option may have been even better, as
>> an environment variable can be defined in .*rc and forgotten, but a
>> command line option needs to be typed every time and would serve as
>> a better reminder (yes, I know it can also be aliased away, so it
>> may not make much practical difference either way).
>>
>> But I'll let the author of the feature to comment.
>>
>> Thanks.
>
>I agree with Junio that filter-branch's one-off nature means that not
>providing a configuration variable seems reasonable in this case.  If
>someone else were to go to the effort of implementing some
>configuration option here, I wouldn't be that strongly against it,
>though I'd rather just let filter-branch lie dormant and stable.
>
>A new command line option might have been better, but it didn't occur
>to me at the time this change was made and I hesitate to needlessly
>force people to adapt again.
I implemented the change and sent a pull request on github (#912) but failed at GitGitGadget. Anyways, here’s the patch:
---
 git-filter-branch.sh | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index fea7964617..fb55afcc86 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -83,15 +83,21 @@ set_ident () {
        finish_ident COMMITTER
 }

-if test -z "$FILTER_BRANCH_SQUELCH_WARNING$GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS"
+if test -z "$FILTER_BRANCH_SQUELCH_WARNING$GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS" && \
+   test "$(git config --bool filter-branch.squelchWarning)" != true
 then
        cat <<EOF
 WARNING: git-filter-branch has a glut of gotchas generating mangled history
-        rewrites.  Hit Ctrl-C before proceeding to abort, then use an
+        rewrites. Hit Ctrl-C before proceeding to abort, then use an
         alternative filtering tool such as 'git filter-repo'
-        (https://github.com/newren/git-filter-repo/) instead.  See the
+        (https://github.com/newren/git-filter-repo/) instead. See the
         filter-branch manual page for more details; to squelch this warning,
-        set FILTER_BRANCH_SQUELCH_WARNING=1.
+         set FILTER_BRANCH_SQUELCH_WARNING=1 or run the following command:
+
+           git config filter-branch.squelchWarning true
+
+         You can replace "git config" with "git config --global" to disable
+         the warning for all repositories.
 EOF
        sleep 10
        printf "Proceeding with filter-branch...\n\n"
--
2.29.0
Johannes Schindelin· Nov 10, 2020, 12:15 UTC · re: Daniel Höpfl · lore

Re: Suppressing filter-branch warning

Hi Daniel,
On Tue, 10 Nov 2020, Daniel Höpfl wrote:
Show 113 quoted lines
> Hallo Elijah,
>
> On Fri, Nov 06, 2020 at 12:12:55PM -0800, Elijah Newren wrote:
> >On Fri, Nov 6, 2020 at 10:06 AM Junio C Hamano <gitster@pobox.com> wrote:
> > >
> > > Daniel Höpfl <daniel@hoepfl.de> writes:
> > >
> > > > Hello there,
> > > >
> > > > What did you do before the bug happened? (Steps to reproduce your issue)
> > > > git filter-branch -f --env-filter '' --tag-name-filter cat -- HEAD
> > > >
> > > > What did you expect to happen? (Expected behavior)
> > > > See below (difference).
> > > >
> > > > What happened instead? (Actual behavior)
> > > > When using git filter-branch, the following message is shown:
> > > >
> > > > ----------8<-----------------------------------------------------
> > > > WARNING: git-filter-branch has a glut of gotchas generating mangled
> > > > history
> > > >         rewrites.  Hit Ctrl-C before proceeding to abort, then use an
> > > >         alternative filtering tool such as 'git filter-repo'
> > > >         (https://github.com/newren/git-filter-repo/) instead.  See the
> > > >         filter-branch manual page for more details; to squelch this
> > > >         warning,
> > > >         set FILTER_BRANCH_SQUELCH_WARNING=1.
> > > > ----------8<-----------------------------------------------------
> > > >
> > > > You can suppress this by setting the environment variable shown.
> > > >
> > > > What's different between what you expected and what actually happened?
> > > >
> > > > Normally, when git introduces this kind of change, there is a
> > > > git config variable that one can set to suppress it.
> > > > That way one has fine grade control when to suppress it (one repo
> > > > only...globally).
> > >
> > > I think this comes from 9df53c5d (Recommend git-filter-repo instead
> > > of git-filter-branch, 2019-09-04).
> > >
> > > FWIW, I personally do not think an environment is a worse choice
> > > over configuration variable in this particular case.  The large
> > > scale rewriting of the entire history in the repository by its
> > > nature is an one-off operation that ought to happen only rarely,
> > > so a one-shot
> > >
> > >         $ FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch ...
> > >
> > > that reminds the user every time would be more appropriate than a
> > > configuration variable that has a more permanent squelching effect.
> > >
> > > If it were a new command line option may have been even better, as
> > > an environment variable can be defined in .*rc and forgotten, but a
> > > command line option needs to be typed every time and would serve as
> > > a better reminder (yes, I know it can also be aliased away, so it
> > > may not make much practical difference either way).
> > >
> > > But I'll let the author of the feature to comment.
> > >
> > > Thanks.
> >
> >I agree with Junio that filter-branch's one-off nature means that not
> >providing a configuration variable seems reasonable in this case.  If
> >someone else were to go to the effort of implementing some
> >configuration option here, I wouldn't be that strongly against it,
> >though I'd rather just let filter-branch lie dormant and stable.
> >
> >A new command line option might have been better, but it didn't occur
> >to me at the time this change was made and I hesitate to needlessly
> >force people to adapt again.
>
> I implemented the change and sent a pull request on github (#912) but failed
> at GitGitGadget. Anyways, here’s the patch:
>
> ---
> git-filter-branch.sh | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/git-filter-branch.sh b/git-filter-branch.sh
> index fea7964617..fb55afcc86 100755
> --- a/git-filter-branch.sh
> +++ b/git-filter-branch.sh
> @@ -83,15 +83,21 @@ set_ident () {
>        finish_ident COMMITTER
> }
>
> -if test -z
> "$FILTER_BRANCH_SQUELCH_WARNING$GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS"
> +if test -z
> "$FILTER_BRANCH_SQUELCH_WARNING$GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS" && \
> +   test "$(git config --bool filter-branch.squelchWarning)" != true
> then
>        cat <<EOF
> WARNING: git-filter-branch has a glut of gotchas generating mangled history
> -        rewrites.  Hit Ctrl-C before proceeding to abort, then use an
> +        rewrites. Hit Ctrl-C before proceeding to abort, then use an
>         alternative filtering tool such as 'git filter-repo'
> -        (https://github.com/newren/git-filter-repo/) instead.  See the
> +        (https://github.com/newren/git-filter-repo/) instead. See the
>         filter-branch manual page for more details; to squelch this warning,
> -        set FILTER_BRANCH_SQUELCH_WARNING=1.
> +         set FILTER_BRANCH_SQUELCH_WARNING=1 or run the following command:
> +
> +           git config filter-branch.squelchWarning true
> +
> +         You can replace "git config" with "git config --global" to disable
> +         the warning for all repositories.
> EOF
>        sleep 10
>        printf "Proceeding with filter-branch...\n\n"
> --
> 2.29.0

The first obstacle was that somebody had to `/allow` you (you probably missed it; https://github.com/git/git/pull/912/#issuecomment-724637575 is a bit of a verbose welcome message, but it _does_ mention it in the "Contributing the patches" section).

The GitGitGadget Pull Request still has the following issues:
- the commit is not signed off
- the commit message is not in a good shape (it consists of a single,
  too-long line)

I also left a couple more comments about the patch itself here: https://github.com/git/git/pull/912/#pullrequestreview-527112997

Ciao, Johannes

← back to recent threads