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]: <20161201204042.6yslbyrg7l6ghhww@xxxxxxxxxxxxxxxxxxxxx>
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