Subject: Re: [PATCH v3 0/3] batch blob diff generation

From: [email-masked]
Date: Wed, 26 Feb 2025 14:58:50 +0000

Hi Justin

On 25/02/2025 23:39, Justin Tobler wrote:
> 
> Changes since V2:
> 
>      - Pathspecs are not supported and thus rejected when provided as
>        arguments. It should be possible in a future series to add support
>        though.
> 
>      - Tree objects present in `diff-pairs` input are rejected. Support
>        for tree objects could be added in the future, but for now they
>        are rejected to enable to future support in a backwards compatible
>        manner.
> 
>      - The -z option is required by git-diff-pairs(1). The NUL-delimited
>        raw diff format is the only accepted form of input. Consequently,
>        NUL-delimited output is the only option in the `--raw` mode.
> 
>      - git-diff-pairs(1) defaults to patch output instead of raw output.
>        This better fits the intended usecase of the command.
> 
>      - A NUL-byte is now always used as the delimiter between batches of
>        file pair diffs when queued diffs are explicitly computed by
>        writing a NUL-byte on stdin.
> 
>      - Several other small cleanups and fixes along with documentation
>        changes.

This addresses all my comments on the previous version, thank you. I do 
wonder if tying the input line termination to the output line 
termination is a good idea for a program that aims to to transform one 
diff format into another. Having said that this series is aimed at 
machine consumption of the output so it probably isn't a big problem.

I also think we might want to massage the output in the tests so that 
we're not running test_cmp on files containing NUL bytes. Using

     git diff-tree -z ... | tr '\0' Q >actual

would get rid of the NULs but does not improve the readability of the 
raw diffs that much as everything is still on a single line. Using '\n' 
instead of 'Q' would give us mulit-line output but we would lose 
confidence that the original output was actually NUL terminated.

Best Wishes

Phillip

> Changes since V1:
> 
>      - Changed from git-diff-blob(1) to git-diff-pairs(1) based on a
>        previously submitted series.
> 
>      - Instead of each line containing a pair of blob revisions, the raw
>        diff format is used as input which already has diff status and
>        object context embedded.
> 
> -Justin
> 
> [1]: <[email-masked]>
> 
> Justin Tobler (3):
>    diff: return diff_filepair from diff queue helpers
>    builtin: introduce diff-pairs command
>    builtin/diff-pairs: allow explicit diff queue flush
> 
>   .gitignore                        |   1 +
>   Documentation/git-diff-pairs.adoc |  60 +++++++++
>   Documentation/meson.build         |   1 +
>   Makefile                          |   1 +
>   builtin.h                         |   1 +
>   builtin/diff-pairs.c              | 206 ++++++++++++++++++++++++++++++
>   command-list.txt                  |   1 +
>   diff.c                            |  70 +++++++---
>   diff.h                            |  25 ++++
>   git.c                             |   1 +
>   meson.build                       |   1 +
>   t/meson.build                     |   1 +
>   t/t4070-diff-pairs.sh             |  83 ++++++++++++
>   13 files changed, 432 insertions(+), 20 deletions(-)
>   create mode 100644 Documentation/git-diff-pairs.adoc
>   create mode 100644 builtin/diff-pairs.c
>   create mode 100755 t/t4070-diff-pairs.sh
>