From: Denton Liu <liu.denton@gmail.com>
To: Git Mailing List <git@vger.kernel.org>
Cc: Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v2 0/4] builtin/diff: learn --merge-base
Date: Thu, 10 Sep 2020 00:32:16 -0700 [thread overview]
Message-ID: <cover.1599723087.git.liu.denton@gmail.com> (raw)
In-Reply-To: <cover.1599332861.git.liu.denton@gmail.com>
The range-notation in `git diff` has been cited as a mistake since diff
compares two endpoints, not whole ranges.[0] In fact, the ranges seem
to take on the opposite meanings when compared to range notation in
`git log`.
In an effort to reduce the use of range notation as much as possible,
introduce the `--merge-base` flag, slightly modified from a suggestion
by Jonathan Nieder.[1] This flag allows us to replace the first commit
given on the command-line with its merge base between the first and
second commits. This allows us to gently deprecate the `...` form
entirely, although that is left as an exercise to the reader ;)
One additional bonus is that this flag allows the "after" side to be not
just constrained to a commit (like with `...` notation). It can now be
the working tree or the index as well.
The `--merge-base` name isn't very satisfying. If anyone has any better
suggestions, please let me know.
Changes since v1:
* Implement Junio's documentation suggestions
* Update git diff's usage to include this option
[0]: https://lore.kernel.org/git/xmqqy2v26hu0.fsf@gitster-ct.c.googlers.com/
[1]: https://lore.kernel.org/git/20191223215928.GB38316@google.com/
Denton Liu (4):
t4068: remove unnecessary >tmp
git-diff.txt: backtick quote command text
builtin/diff: parse --no-index using parse_options()
builtin/diff: learn --merge-base
Documentation/git-diff.txt | 40 +++++++++++-----
builtin/diff.c | 94 +++++++++++++++++++++++++++++++++-----
diff-no-index.c | 15 ++----
t/t4068-diff-symmetric.sh | 89 ++++++++++++++++++++++++++++++++++--
4 files changed, 198 insertions(+), 40 deletions(-)
Range-diff against v1:
1: 231ba3f661 ! 1: 4f219cf0d1 builtin/diff: learn --merge-base
@@ Commit message
Suggested-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ ## Notes ##
+ The `--merge-base` name isn't very satisfying. If anyone has any
+ suggestions for alternative names, please let me know.
+
## Documentation/git-diff.txt ##
@@ Documentation/git-diff.txt: SYNOPSIS
'git diff' [<options>] [<commit>] [--] [<path>...]
@@ Documentation/git-diff.txt: files on disk.
+equivalent to `git diff $(git merge-base A B) B`.
++
+In the case where one commit is given, a diff is displayed between the
-+merge base and the working tree or the index if `--cached` is given.
-+`git diff --merge-base A` is equivalent to `git diff $(git merge-base A
-+HEAD)`.
++merge base of the commit and the HEAD and the working tree or the index
++if `--cached` is given. `git diff --merge-base A` is equivalent to `git
++diff $(git merge-base A HEAD)`.
++
+In the case where no commits are given, this form behaves identically to
+as if no `--merge-base` were supplied.
@@ builtin/diff.c
#define DIFF_NO_INDEX_EXPLICIT 1
#define DIFF_NO_INDEX_IMPLICIT 2
+@@ builtin/diff.c: static const char builtin_diff_usage[] =
+ "git diff [<options>] [<commit>] [--] [<path>...]\n"
+ " or: git diff [<options>] --cached [<commit>] [--] [<path>...]\n"
+ " or: git diff [<options>] <commit> [<commit>...] <commit> [--] [<path>...]\n"
+-" or: git diff [<options>] <commit>...<commit>] [--] [<path>...]\n"
++" or: git diff [<options>] --merge-base [<commit> [<commit>]] [--] [<path>...]\n"
+ " or: git diff [<options>] <blob> <blob>]\n"
+ " or: git diff [<options>] --no-index [--] <path> <path>]\n"
+ COMMON_DIFF_OPTIONS_HELP;
@@ builtin/diff.c: int cmd_diff(int argc, const char **argv, const char *prefix)
int blobs = 0, paths = 0;
struct object_array_entry *blob[2];
@@ builtin/diff.c: int cmd_diff(int argc, const char **argv, const char *prefix)
DIFF_NO_INDEX_EXPLICIT,
PARSE_OPT_NONEG),
+ OPT_BOOL(0, "merge-base", &merge_base,
-+ N_("use the merge base between the two commits as the diff base")),
++ N_("compare with the merge base between two commits")),
OPT_END(),
};
--
2.28.0.618.gf4bc123cb7
next prev parent reply other threads:[~2020-09-10 7:33 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-05 19:08 [PATCH 0/4] builtin/diff: learn --merge-base Denton Liu
2020-09-05 19:08 ` [PATCH 1/4] t4068: remove unnecessary >tmp Denton Liu
2020-09-05 19:08 ` [PATCH 2/4] git-diff.txt: backtick quote command text Denton Liu
2020-09-05 19:08 ` [PATCH 3/4] builtin/diff: parse --no-index using parse_options() Denton Liu
2020-09-05 19:08 ` [PATCH 4/4] builtin/diff: learn --merge-base Denton Liu
2020-09-06 21:58 ` Junio C Hamano
2020-09-10 7:32 ` Denton Liu [this message]
2020-09-10 7:32 ` [PATCH v2 1/4] t4068: remove unnecessary >tmp Denton Liu
2020-09-10 7:32 ` [PATCH v2 2/4] git-diff.txt: backtick quote command text Denton Liu
2020-09-10 7:32 ` [PATCH v2 3/4] builtin/diff: parse --no-index using parse_options() Denton Liu
2020-09-10 18:35 ` Junio C Hamano
2020-09-13 8:31 ` Denton Liu
2020-09-13 21:45 ` Junio C Hamano
2020-09-10 7:32 ` [PATCH v2 4/4] builtin/diff: learn --merge-base Denton Liu
2020-09-17 7:44 ` [PATCH v3 00/10] " Denton Liu
2020-09-17 7:44 ` [PATCH v3 01/10] t4068: remove unnecessary >tmp Denton Liu
2020-09-17 7:44 ` [PATCH v3 02/10] git-diff-index.txt: make --cached description a proper sentence Denton Liu
2020-09-17 7:44 ` [PATCH v3 03/10] git-diff.txt: backtick quote command text Denton Liu
2020-09-17 7:44 ` [PATCH v3 04/10] contrib/completion: extract common diff/difftool options Denton Liu
2020-09-17 7:44 ` [PATCH v3 05/10] diff-lib: accept option flags in run_diff_index() Denton Liu
2020-09-17 17:00 ` Junio C Hamano
2020-09-17 7:44 ` [PATCH v3 06/10] diff-lib: define diff_get_merge_base() Denton Liu
2020-09-17 17:16 ` Junio C Hamano
2020-09-18 10:34 ` Denton Liu
2020-09-19 0:33 ` Junio C Hamano
2020-09-17 7:44 ` [PATCH v3 07/10] t4068: add --merge-base tests Denton Liu
2020-09-17 7:44 ` [PATCH v3 08/10] builtin/diff-index: learn --merge-base Denton Liu
2020-09-17 17:28 ` Junio C Hamano
2020-09-17 18:13 ` Jeff King
2020-09-18 5:11 ` Junio C Hamano
2020-09-18 18:12 ` Jeff King
2020-09-17 7:44 ` [PATCH v3 09/10] builtin/diff-tree: " Denton Liu
2020-09-17 18:23 ` Junio C Hamano
2020-09-18 10:48 ` Denton Liu
2020-09-18 16:52 ` Junio C Hamano
2020-09-20 11:01 ` Denton Liu
2020-09-21 16:05 ` Junio C Hamano
2020-09-21 17:27 ` Denton Liu
2020-09-21 21:09 ` Junio C Hamano
2020-09-21 21:19 ` Junio C Hamano
2020-09-21 21:54 ` Denton Liu
2020-09-21 22:18 ` Junio C Hamano
2020-09-23 9:47 ` Denton Liu
2020-09-25 21:02 ` Junio C Hamano
2020-09-26 1:52 ` Denton Liu
2020-09-17 7:44 ` [PATCH v3 10/10] contrib/completion: complete `git diff --merge-base` Denton Liu
2020-09-20 11:22 ` [PATCH v4 00/10] builtin/diff: learn --merge-base Denton Liu
2020-09-20 11:22 ` [PATCH v4 01/10] t4068: remove unnecessary >tmp Denton Liu
2020-09-20 11:22 ` [PATCH v4 02/10] git-diff-index.txt: make --cached description a proper sentence Denton Liu
2020-09-20 11:22 ` [PATCH v4 03/10] git-diff.txt: backtick quote command text Denton Liu
2020-09-20 11:22 ` [PATCH v4 04/10] contrib/completion: extract common diff/difftool options Denton Liu
2020-09-20 11:22 ` [PATCH v4 05/10] diff-lib: accept option flags in run_diff_index() Denton Liu
2020-09-20 11:22 ` [PATCH v4 06/10] diff-lib: define diff_get_merge_base() Denton Liu
2020-09-20 11:22 ` [PATCH v4 07/10] t4068: add --merge-base tests Denton Liu
2020-09-20 11:22 ` [PATCH v4 08/10] builtin/diff-index: learn --merge-base Denton Liu
2020-09-29 19:53 ` Martin Ågren
2020-09-20 11:22 ` [PATCH v4 09/10] builtin/diff-tree: " Denton Liu
2020-09-20 11:22 ` [PATCH v4 10/10] contrib/completion: complete `git diff --merge-base` Denton Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1599723087.git.liu.denton@gmail.com \
--to=liu.denton@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.