From: Taylor Blau <me@ttaylorr.com>
To: Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: Re: [PATCH 2/2] diff-filter: be more careful when looking for negative bits
Date: Tue, 25 Jan 2022 18:21:49 -0500 [thread overview]
Message-ID: <YfCGDY5qXPCFXpfp@nand.local> (raw)
In-Reply-To: <e8006493a9ed4da9b9125865e004ba7ace20e7a4.1643149759.git.gitgitgadget@gmail.com>
On Tue, Jan 25, 2022 at 10:29:19PM +0000, Johannes Schindelin via GitGitGadget wrote:
> diff --git a/diff.c b/diff.c
> index c862771a589..fc1151b9c73 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -4821,17 +4821,15 @@ static int diff_opt_diff_filter(const struct option *option,
> prepare_filter_bits();
>
> /*
> - * If there is a negation e.g. 'd' in the input, and we haven't
> + * If the input starts with a negation e.g. 'd', and we haven't
> * initialized the filter field with another --diff-filter, start
> * from full set of bits, except for AON.
> */
> if (!opt->filter) {
> - for (i = 0; (optch = optarg[i]) != '\0'; i++) {
> - if (optch < 'a' || 'z' < optch)
> - continue;
> + optch = optarg[0];
> + if (optch >= 'a' && 'z' >= optch) {
> opt->filter = (1 << (ARRAY_SIZE(diff_status_letters) - 1)) - 1;
> opt->filter &= ~filter_bit[DIFF_STATUS_FILTER_AON];
> - break;
> }
> }
Thinking through how this would have worked before with
`--diff-filter=Dr`, I think it goes something like:
1. We set all bits (except the all-or-none bit) on via the first loop.
2. Then we OR in the bit for deletions, which does not change the
overall filter (since it was already set by the previous step).
3. Then we unset the bit corresponding to renames.
That leaves us with all bits on except two: DIFF_STATUS_RENAMED and
DIFF_STATUS_FILTER_AON.
As far as I can understand, the AON "filter" shows all files as long as
at least one of them matches the filter, otherwise it shows nothing at
all.
But that doesn't save us, since we have many more bits on than we should
have, meaning that `--diff-filter=Dr` doesn't work at all (assuming you
expected it to show just deletions, like `--diff-filter=D` does).
It's possible that I don't understand what the all-or-nothing bit is
supposed to be doing, though.
Thanks,
Taylor
next prev parent reply other threads:[~2022-01-25 23:21 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-25 22:29 [PATCH 0/2] Fix two --diff-filter bugs Johannes Schindelin via GitGitGadget
2022-01-25 22:29 ` [PATCH 1/2] docs(diff): lose incorrect claim about `diff-files --diff-filter=A` Johannes Schindelin via GitGitGadget
2022-01-26 7:03 ` Junio C Hamano
2022-01-25 22:29 ` [PATCH 2/2] diff-filter: be more careful when looking for negative bits Johannes Schindelin via GitGitGadget
2022-01-25 23:21 ` Taylor Blau [this message]
2022-01-28 11:52 ` Johannes Schindelin
2022-01-26 7:23 ` Junio C Hamano
2022-01-26 22:55 ` Taylor Blau
2022-01-26 23:36 ` Junio C Hamano
2022-01-28 11:54 ` Johannes Schindelin
2022-01-26 17:57 ` Ævar Arnfjörð Bjarmason
2022-01-27 19:08 ` [PATCH v2 0/3] Fix two --diff-filter bugs Johannes Schindelin via GitGitGadget
2022-01-27 19:08 ` [PATCH v2 1/3] docs(diff): lose incorrect claim about `diff-files --diff-filter=A` Johannes Schindelin via GitGitGadget
2022-01-27 19:08 ` [PATCH v2 2/3] diff.c: move the diff filter bits definitions up a bit Johannes Schindelin via GitGitGadget
2022-01-27 19:08 ` [PATCH v2 3/3] diff-filter: be more careful when looking for negative bits Johannes Schindelin via GitGitGadget
2022-01-28 1:16 ` Junio C Hamano
2022-01-28 12:01 ` Johannes Schindelin
2022-01-28 12:02 ` [PATCH v3 0/3] Fix two --diff-filter bugs Johannes Schindelin via GitGitGadget
2022-01-28 12:02 ` [PATCH v3 1/3] docs(diff): lose incorrect claim about `diff-files --diff-filter=A` Johannes Schindelin via GitGitGadget
2022-01-28 12:02 ` [PATCH v3 2/3] diff.c: move the diff filter bits definitions up a bit Johannes Schindelin via GitGitGadget
2022-01-28 12:02 ` [PATCH v3 3/3] diff-filter: be more careful when looking for negative bits Johannes Schindelin via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YfCGDY5qXPCFXpfp@nand.local \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=johannes.schindelin@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.