summaryrefslogtreecommitdiff
path: root/diff.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2021-02-11 19:57:50 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-02-16 17:30:42 (GMT)
commit1eb4136ac2a24764257567b930535fcece01719f (patch)
tree7a8abfa8d2beabee2f3260c001eff7a7335c5166 /diff.h
parentc6102b758572c7515f606b2423dfe38934fe6764 (diff)
downloadgit-1eb4136ac2a24764257567b930535fcece01719f.zip
git-1eb4136ac2a24764257567b930535fcece01719f.tar.gz
git-1eb4136ac2a24764257567b930535fcece01719f.tar.bz2
diff: --{rotate,skip}-to=<path>
In the implementation of "git difftool", there is a case where the user wants to start viewing the diffs at a specific path and continue on to the rest, optionally wrapping around to the beginning. Since it is somewhat cumbersome to implement such a feature as a post-processing step of "git diff" output, let's support it internally with two new options. - "git diff --rotate-to=C", when the resulting patch would show paths A B C D E without the option, would "rotate" the paths to shows patch to C D E A B instead. It is an error when there is no patch for C is shown. - "git diff --skip-to=C" would instead "skip" the paths before C, and shows patch to C D E. Again, it is an error when there is no patch for C is shown. - "git log [-p]" also accepts these two options, but it is not an error if there is no change to the specified path. Instead, the set of output paths are rotated or skipped to the specified path or the first path that sorts after the specified path. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'diff.h')
-rw-r--r--diff.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/diff.h b/diff.h
index 2ff2b1c..45300e3 100644
--- a/diff.h
+++ b/diff.h
@@ -227,6 +227,27 @@ enum diff_submodule_format {
struct diff_options {
const char *orderfile;
+ /*
+ * "--rotate-to=<file>" would start showing at <file> and when
+ * the output reaches the end, wrap around by default.
+ * Setting skip_instead_of_rotate to true stops the output at the
+ * end, effectively discarding the earlier part of the output
+ * before <file>'s diff (this is used to implement the
+ * "--skip-to=<file>" option).
+ *
+ * When rotate_to_strict is set, it is an error if there is no
+ * <file> in the diff. Otherwise, the output starts at the
+ * path that is the same as, or first path that sorts after,
+ * <file>. Because it is unreasonable to require the exact
+ * match for "git log -p --rotate-to=<file>" (i.e. not all
+ * commit would touch that single <file>), "git log" sets it
+ * to false. "git diff" sets it to true to detect an error
+ * in the command line option.
+ */
+ const char *rotate_to;
+ int skip_instead_of_rotate;
+ int rotate_to_strict;
+
/**
* A constant string (can and typically does contain newlines to look for
* a block of text, not just a single line) to filter out the filepairs