Message ID | 20231004214558.210339-3-sorganov@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v3,1/3] diff-merges: improve --diff-merges documentation | expand |
Sergey Organov <sorganov@gmail.com> writes: > This option provides a shortcut to request diff with respect to first > parent for any kind of commit, universally. It's implemented as pure > synonym for "--diff-merges=first-parent --patch". That explains what the patch does, but it does not tell us why it is useful [*]. > NOTE: originally proposed as '-d', and renamed to '--dd' due to Junio > request to keep "short-and-sweet" '-d' reserved for other uses. The note is not grammatical, and more importantly, readers of "git log" 6 months down the road would not care. I'd rather not see it in the proposed log message. It is suitable material to place after the three-dash line, or in the cover letter for the iteration. > diff --git a/diff-merges.c b/diff-merges.c > index ec97616db1df..45507588a279 100644 > --- a/diff-merges.c > +++ b/diff-merges.c > @@ -131,6 +131,9 @@ int diff_merges_parse_opts(struct rev_info *revs, const char **argv) > } else if (!strcmp(arg, "--cc")) { > set_dense_combined(revs); > revs->merges_imply_patch = 1; > + } else if (!strcmp(arg, "--dd")) { > + set_first_parent(revs); > + revs->merges_imply_patch = 1; Quite straight-forward as expected. I do not think "--dd" clicks for many people as "first parent diffs all over", though. > } else if (!strcmp(arg, "--remerge-diff")) { > set_remerge_diff(revs); > revs->merges_imply_patch = 1; > diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh > index 5de1d190759f..4b474808311e 100755 > --- a/t/t4013-diff-various.sh > +++ b/t/t4013-diff-various.sh > @@ -473,6 +473,14 @@ test_expect_success 'log --diff-merges=on matches --diff-merges=separate' ' > test_cmp expected actual > ' > > +test_expect_success 'log --dd matches --diff-merges=1 -p' ' > + git log --diff-merges=1 -p master >result && > + process_diffs result >expected && > + git log --dd master >result && > + process_diffs result >actual && > + test_cmp expected actual > +' > + > test_expect_success 'deny wrong log.diffMerges config' ' > test_config log.diffMerges wrong-value && > test_expect_code 128 git log Looking good. Thanks. [Footnote] * As I said elsewhere, I do not think it is a good idea to encourage users' to adopt a screwed-up worldview in which first parent is special but not special, and does the wrong thing for reverse merges. If the option were short-hand for "--first-parent -p", at least I would be more sympathetic.
Junio C Hamano <gitster@pobox.com> writes: > Sergey Organov <sorganov@gmail.com> writes: > >> This option provides a shortcut to request diff with respect to first >> parent for any kind of commit, universally. It's implemented as pure >> synonym for "--diff-merges=first-parent --patch". > > That explains what the patch does, but it does not tell us why it is > useful [*]. > >> NOTE: originally proposed as '-d', and renamed to '--dd' due to Junio >> request to keep "short-and-sweet" '-d' reserved for other uses. > > The note is not grammatical, and more importantly, readers of "git > log" 6 months down the road would not care. I'd rather not see it > in the proposed log message. It is suitable material to place after > the three-dash line, or in the cover letter for the iteration. OK, will get rid of it. Thanks, -- Sergey Organov
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index 8035210c1418..f80d493dd4c8 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -56,6 +56,11 @@ ifdef::git-log[] Produce dense combined diff output for merge commits. Shortcut for '--diff-merges=dense-combined -p'. +--dd:: + Produce diff with respect to first parent for both merge and + regular commits. + Shortcut for '--diff-merges=first-parent -p'. + --remerge-diff:: Produce diff against re-merge. Shortcut for '--diff-merges=remerge -p'. diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt index 9b7ec96e767a..579682172fe4 100644 --- a/Documentation/git-log.txt +++ b/Documentation/git-log.txt @@ -120,7 +120,7 @@ By default, `git log` does not generate any diff output. The options below can be used to show the changes made by each commit. Note that unless one of `--diff-merges` variants (including short -`-m`, `-c`, and `--cc` options) is explicitly given, merge commits +`-m`, `-c`, `--cc`, and `--dd` options) is explicitly given, merge commits will not show a diff, even if a diff format like `--patch` is selected, nor will they match search options like `-S`. The exception is when `--first-parent` is in use, in which case `first-parent` is diff --git a/diff-merges.c b/diff-merges.c index ec97616db1df..45507588a279 100644 --- a/diff-merges.c +++ b/diff-merges.c @@ -131,6 +131,9 @@ int diff_merges_parse_opts(struct rev_info *revs, const char **argv) } else if (!strcmp(arg, "--cc")) { set_dense_combined(revs); revs->merges_imply_patch = 1; + } else if (!strcmp(arg, "--dd")) { + set_first_parent(revs); + revs->merges_imply_patch = 1; } else if (!strcmp(arg, "--remerge-diff")) { set_remerge_diff(revs); revs->merges_imply_patch = 1; diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh index 5de1d190759f..4b474808311e 100755 --- a/t/t4013-diff-various.sh +++ b/t/t4013-diff-various.sh @@ -473,6 +473,14 @@ test_expect_success 'log --diff-merges=on matches --diff-merges=separate' ' test_cmp expected actual ' +test_expect_success 'log --dd matches --diff-merges=1 -p' ' + git log --diff-merges=1 -p master >result && + process_diffs result >expected && + git log --dd master >result && + process_diffs result >actual && + test_cmp expected actual +' + test_expect_success 'deny wrong log.diffMerges config' ' test_config log.diffMerges wrong-value && test_expect_code 128 git log
This option provides a shortcut to request diff with respect to first parent for any kind of commit, universally. It's implemented as pure synonym for "--diff-merges=first-parent --patch". NOTE: originally proposed as '-d', and renamed to '--dd' due to Junio request to keep "short-and-sweet" '-d' reserved for other uses. Signed-off-by: Sergey Organov <sorganov@gmail.com> --- Documentation/diff-options.txt | 5 +++++ Documentation/git-log.txt | 2 +- diff-merges.c | 3 +++ t/t4013-diff-various.sh | 8 ++++++++ 4 files changed, 17 insertions(+), 1 deletion(-)