Subject: [PATCH v2 0/3] diff: add -I<regex> that ignores matching changes

From: Michał Kępień <[email-masked]>
Date: Mon, 12 Oct 2020 11:17:48 +0200

This patch series adds a new diff option that enables ignoring changes
whose all lines (changed, removed, and added) match a given regular
expression.  This is similar to the -I option in standalone diff
utilities and can be used e.g. to ignore changes which only affect code
comments or to look for unrelated changes in commits containing a large
number of automatically applied modifications (e.g. a tree-wide string
replacement).  The difference between -G/-S and the new -I option is
that the latter filters output on a per-change basis.

Changes from v1:

  - Add a new preliminary cleanup patch which ensures xpparam_t
    structures are always zero-initialized.  (This was a prerequisite
    for the next change below.)

  - Do not add a new 'xdl_opts' flag to check whether -I was used;
    instead, just check whether the array of regular expressions to
    match against is non-NULL.

  - Enable the -I option to be used multiple times.  As a consequence of
    this, regular expressions are now "pre-compiled" in the option's
    callback (and passed around as an array of regex_t structures)
    rather than deep down in xdiff code.  Add test cases exercising use
    of multiple -I options in the same git invocation.  Update
    documentation accordingly.

  - Rename xdl_mark_ignorable() to xdl_mark_ignorable_lines(), to
    indicate that it is logically a "sibling" of
    xdl_mark_ignorable_regex() rather than its "parent".

  - Optimize xdl_mark_ignorable_regex() by making it immediately skip
    changes already marked as ignored by xdl_mark_ignorable_lines().

  - Fix coding style issue in the prototype part of the definition of
    xdl_mark_ignorable_regex().

  - Add "/* see Documentation/diff-options.txt */" comments for the
    fields added to struct diff_options and xpparam_t, mimicking the
    comments used for 'anchors', 'anchors_nr', and 'anchors_alloc'.

  - Revise commit log messages to reflect all of the above.

Michał Kępień (3):
  merge-base, xdiff: zero out xpparam_t structures
  diff: add -I<regex> that ignores matching changes
  t: add -I<regex> tests

 Documentation/diff-options.txt |   4 +
 builtin/merge-tree.c           |   1 +
 diff.c                         |  23 ++
 diff.h                         |   4 +
 t/t4069-diff-ignore-regex.sh   | 426 +++++++++++++++++++++++++++++++++
 xdiff/xdiff.h                  |   4 +
 xdiff/xdiffi.c                 |  47 +++-
 xdiff/xhistogram.c             |   2 +
 xdiff/xpatience.c              |   2 +
 9 files changed, 511 insertions(+), 2 deletions(-)
 create mode 100755 t/t4069-diff-ignore-regex.sh

-- 
2.28.0