summaryrefslogtreecommitdiff
path: root/diff.h
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2022-01-28 12:02:50 (GMT)
committerJunio C Hamano <gitster@pobox.com>2022-01-28 18:18:18 (GMT)
commit75408ca94980c125b3a800003c3e6b7cdcb27d44 (patch)
treeaa07d5a9eb5f01f9765132a18fc25dd73fbf66e8 /diff.h
parent4d4d4eaa7b7f7ceda0648273ad33b71fc68e36c1 (diff)
downloadgit-75408ca94980c125b3a800003c3e6b7cdcb27d44.zip
git-75408ca94980c125b3a800003c3e6b7cdcb27d44.tar.gz
git-75408ca94980c125b3a800003c3e6b7cdcb27d44.tar.bz2
diff-filter: be more careful when looking for negative bits
The `--diff-filter=<bits>` option allows to filter the diff by certain criteria, for example `R` to only show renamed files. It also supports negating a filter via a down-cased letter, i.e. `r` to show _everything but_ renamed files. However, the code is a bit overzealous when trying to figure out whether `git diff` should start with all diff-filters turned on because the user provided a lower-case letter: if the `--diff-filter` argument starts with an upper-case letter, we must not start with all bits turned on. Even worse, it is possible to specify the diff filters in multiple, separate options, e.g. `--diff-filter=AM [...] --diff-filter=m`. Let's accumulate the include/exclude filters independently, and only special-case the "only exclude filters were specified" case after parsing the options altogether. Note: The code replaced by this commit took pains to avoid setting any unused bits of `options->filter`. That was unnecessary, though, as all accesses happen via the `filter_bit_tst()` function using specific bits, and setting the unused bits has no effect. Therefore, we can simplify the code by using `~0` (or in this instance, `~<unwanted-bit>`). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'diff.h')
-rw-r--r--diff.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/diff.h b/diff.h
index 8ba85c5..a70e7c4 100644
--- a/diff.h
+++ b/diff.h
@@ -283,7 +283,7 @@ struct diff_options {
struct diff_flags flags;
/* diff-filter bits */
- unsigned int filter;
+ unsigned int filter, filter_not;
int use_color;