diff options
| author | Justin Tobler <jltobler@gmail.com> | 2025-02-28 15:33:46 -0600 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2025-03-03 08:17:47 -0800 |
| commit | cf15095ec52f1e997ec9eef42bdf275d2a68fe66 (patch) | |
| tree | e413d7d7fc680a6d3d9da72960adad54acaee993 /builtin/diff-pairs.c | |
| parent | builtin: introduce diff-pairs command (diff) | |
| download | git-cf15095ec52f1e997ec9eef42bdf275d2a68fe66.tar.gz git-cf15095ec52f1e997ec9eef42bdf275d2a68fe66.zip | |
builtin/diff-pairs: allow explicit diff queue flush
The diffs queued from git-diff-pairs(1) are flushed when stdin is
closed. To enable greater flexibility, allow control over when the diff
queue is flushed by writing a single NUL byte on stdin between input
file pairs. Diff output between flushes is separated by a single NUL
byte.
Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/diff-pairs.c')
| -rw-r--r-- | builtin/diff-pairs.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/builtin/diff-pairs.c b/builtin/diff-pairs.c index 6be17c1abd..71c045331a 100644 --- a/builtin/diff-pairs.c +++ b/builtin/diff-pairs.c @@ -57,6 +57,7 @@ int cmd_diff_pairs(int argc, const char **argv, const char *prefix, show_usage_with_options_if_asked(argc, argv, builtin_diff_pairs_usage, parseopts); repo_config(repo, git_diff_basic_config, NULL); + revs.diffopt.no_free = 1; revs.disable_stdin = 1; revs.abbrev = 0; revs.diff = 1; @@ -106,6 +107,18 @@ int cmd_diff_pairs(int argc, const char **argv, const char *prefix, break; p = meta.buf; + if (!*p) { + diffcore_std(&revs.diffopt); + diff_flush(&revs.diffopt); + /* + * When the diff queue is explicitly flushed, append a + * NUL byte to separate batches of diffs. + */ + fputc('\0', revs.diffopt.file); + fflush(revs.diffopt.file); + continue; + } + if (*p != ':') die(_("invalid raw diff input")); p++; @@ -179,6 +192,7 @@ int cmd_diff_pairs(int argc, const char **argv, const char *prefix, } } + revs.diffopt.no_free = 0; diffcore_std(&revs.diffopt); diff_flush(&revs.diffopt); ret = diff_result_code(&revs); |
