From: Sergey Organov <sorganov@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Jeff King" <peff@peff.net>,
"Philip Oakley" <philipoakley@iee.email>,
"Elijah Newren" <newren@gmail.com>,
"Felipe Contreras" <felipe.contreras@gmail.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Alex Henrie" <alexhenrie24@gmail.com>,
git@vger.kernel.org, "Sergey Organov" <sorganov@gmail.com>
Subject: [PATCH 2/6] diff-merges: move specific diff-index "-m" handling to diff-index
Date: Mon, 10 May 2021 18:34:47 +0300 [thread overview]
Message-ID: <20210510153451.15090-3-sorganov@gmail.com> (raw)
In-Reply-To: <20210510153451.15090-1-sorganov@gmail.com>
Move specific handling of "-m" for diff-index to diff-index.c, so
diff-merges is left to handle only diff for merges options.
Being a better design by itself, this is especially essential in
preparation for letting -m imply -p, as "diff-index -m" obviously
should not imply -p, as it's entirely unrelated.
Signed-off-by: Sergey Organov <sorganov@gmail.com>
---
builtin/diff-index.c | 45 ++++++++++++++++++++++++++++++++++----------
diff-merges.c | 13 +------------
2 files changed, 36 insertions(+), 22 deletions(-)
diff --git a/builtin/diff-index.c b/builtin/diff-index.c
index 176fe7ff2b4e..28bc51d0d8f4 100644
--- a/builtin/diff-index.c
+++ b/builtin/diff-index.c
@@ -12,11 +12,37 @@ static const char diff_cache_usage[] =
"[<common-diff-options>] <tree-ish> [<path>...]"
COMMON_DIFF_OPTIONS_HELP;
+static int parse_distinct_options(int argc, const char **argv,
+ struct rev_info *revs, unsigned int *options)
+{
+ int i, left;
+
+ for (i = left = 1; i < argc; i++) {
+ const char *arg = argv[i];
+ int leave = 0;
+
+ if (!strcmp(arg, "--cached"))
+ *options |= DIFF_INDEX_CACHED;
+ else if (!strcmp(arg, "--merge-base"))
+ *options |= DIFF_INDEX_MERGE_BASE;
+ else if (!strcmp(arg, "-m"))
+ revs->match_missing = 1;
+ else
+ leave = 1;
+
+ if (leave)
+ argv[left++] = arg;
+ }
+
+ argv[left] = NULL;
+
+ return left;
+}
+
int cmd_diff_index(int argc, const char **argv, const char *prefix)
{
struct rev_info rev;
unsigned int option = 0;
- int i;
int result;
if (argc == 2 && !strcmp(argv[1], "-h"))
@@ -27,17 +53,16 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
rev.abbrev = 0;
prefix = precompose_argv_prefix(argc, argv, prefix);
+ /*
+ * It's essential to parse our distinct options before calling
+ * setup_revisions(), for the latter not to see "-m".
+ */
+ argc = parse_distinct_options(argc, argv, &rev, &option);
argc = setup_revisions(argc, argv, &rev, NULL);
- for (i = 1; i < argc; i++) {
- const char *arg = argv[i];
- if (!strcmp(arg, "--cached"))
- option |= DIFF_INDEX_CACHED;
- else if (!strcmp(arg, "--merge-base"))
- option |= DIFF_INDEX_MERGE_BASE;
- else
- usage(diff_cache_usage);
- }
+ if (argc > 1)
+ usage(diff_cache_usage);
+
if (!rev.diffopt.output_format)
rev.diffopt.output_format = DIFF_FORMAT_RAW;
diff --git a/diff-merges.c b/diff-merges.c
index f3a9daed7e05..4016800c422c 100644
--- a/diff-merges.c
+++ b/diff-merges.c
@@ -30,17 +30,6 @@ static void set_first_parent(struct rev_info *revs)
revs->first_parent_merges = 1;
}
-static void set_m(struct rev_info *revs)
-{
- /*
- * To "diff-index", "-m" means "match missing", and to the "log"
- * family of commands, it means "show default diff for merges". Set
- * both fields appropriately.
- */
- set_to_default(revs);
- revs->match_missing = 1;
-}
-
static void set_combined(struct rev_info *revs)
{
suppress(revs);
@@ -108,7 +97,7 @@ int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
const char *arg = argv[0];
if (!strcmp(arg, "-m")) {
- set_m(revs);
+ set_to_default(revs);
} else if (!strcmp(arg, "-c")) {
set_combined(revs);
revs->combined_imply_patch = 1;
--
2.25.1
next prev parent reply other threads:[~2021-05-10 15:35 UTC|newest]
Thread overview: 129+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-29 1:44 Why doesn't `git log -m` imply `-p`? Alex Henrie
2021-04-29 3:22 ` Junio C Hamano
2021-04-29 12:38 ` Sergey Organov
2021-04-29 15:25 ` Alex Henrie
2021-04-29 16:35 ` Sergey Organov
2021-04-29 17:24 ` Alex Henrie
2021-04-29 19:07 ` Sergey Organov
2021-05-04 20:09 ` Felipe Contreras
2021-05-04 20:34 ` Sergey Organov
2021-04-29 23:27 ` Junio C Hamano
2021-04-30 4:50 ` Junio C Hamano
2021-04-30 14:00 ` Sergey Organov
2021-05-01 0:41 ` Junio C Hamano
2021-05-03 17:42 ` Sergey Organov
2021-05-04 1:15 ` Junio C Hamano
2021-05-04 9:10 ` Sergey Organov
2021-05-04 12:38 ` Junio C Hamano
2021-05-04 14:18 ` Sergey Organov
2021-05-05 0:20 ` Junio C Hamano
2021-05-05 13:43 ` Sergey Organov
2021-05-06 0:27 ` Junio C Hamano
2021-05-06 12:59 ` Sergey Organov
2021-05-06 20:29 ` Junio C Hamano
2021-05-06 20:48 ` Sergey Organov
2021-05-07 1:31 ` Alex Henrie
2021-05-10 12:11 ` Sergey Organov
2021-05-10 16:56 ` Alex Henrie
2021-05-10 15:34 ` [PATCH 0/6] diff-merges: let -m imply -p Sergey Organov
2021-05-10 15:34 ` [PATCH 1/6] t4013: add test for "git diff-index -m" Sergey Organov
2021-05-10 15:34 ` Sergey Organov [this message]
2021-05-11 4:09 ` [PATCH 2/6] diff-merges: move specific diff-index "-m" handling to diff-index Junio C Hamano
2021-05-11 5:23 ` Junio C Hamano
2021-05-11 5:41 ` Junio C Hamano
2021-05-11 13:43 ` Sergey Organov
2021-05-10 15:34 ` [PATCH 3/6] git-svn: stop passing "-m" to "git rev-list" Sergey Organov
2021-05-10 15:34 ` [PATCH 4/6] stash list: stop passing "-m" to "git list" Sergey Organov
2021-05-10 15:34 ` [PATCH 5/6] diff-merges: rename "combined_imply_patch" to "merges_imply_patch" Sergey Organov
2021-05-10 15:34 ` [PATCH 6/6] diff-merges: let -m imply -p Sergey Organov
2021-05-11 4:14 ` Junio C Hamano
2021-05-11 4:56 ` Junio C Hamano
2021-05-11 14:03 ` Sergey Organov
2021-05-11 17:13 ` Alex Henrie
2021-05-11 18:46 ` Sergey Organov
2021-05-11 19:53 ` Alex Henrie
2021-05-11 20:27 ` Sergey Organov
2021-05-12 1:16 ` Felipe Contreras
2021-05-11 18:31 ` Elijah Newren
2021-05-11 19:00 ` Sergey Organov
2021-05-11 19:56 ` Elijah Newren
2021-05-11 20:32 ` Sergey Organov
2021-05-11 20:43 ` Junio C Hamano
2021-05-11 21:38 ` Sergey Organov
2021-05-11 23:40 ` Junio C Hamano
2021-05-19 21:44 ` Jonathan Nieder
2021-05-20 20:39 ` Sergey Organov
2021-05-21 18:14 ` Felipe Contreras
2021-05-11 16:29 ` Sergey Organov
2021-05-17 12:57 ` Sergey Organov
2021-05-11 16:30 ` Sergey Organov
2021-05-19 21:48 ` Jonathan Nieder
2021-05-19 22:03 ` Sergey Organov
2021-05-19 23:32 ` Junio C Hamano
2021-05-20 13:14 ` Sergey Organov
2021-05-20 18:50 ` Jonathan Nieder
2021-05-20 19:38 ` Sergey Organov
2021-05-17 15:58 ` [PATCH v1 0/9] " Sergey Organov
2021-05-17 15:58 ` [PATCH v1 1/9] t4013: test that "-m" alone has no effect in "git log" Sergey Organov
2021-05-17 15:58 ` [PATCH v1 2/9] t4013: test "git -m --raw" Sergey Organov
2021-05-18 3:27 ` Bagas Sanjaya
2021-05-18 12:13 ` Sergey Organov
2021-05-17 15:58 ` [PATCH v1 3/9] t4013: test "git -m --stat" Sergey Organov
2021-05-17 15:58 ` [PATCH v1 4/9] t4013: test "git diff-index -m" Sergey Organov
2021-05-17 15:58 ` [PATCH v1 5/9] diff-merges: move specific diff-index "-m" handling to diff-index Sergey Organov
2021-05-17 20:10 ` Junio C Hamano
2021-05-17 20:24 ` Sergey Organov
2021-05-17 20:29 ` Junio C Hamano
2021-05-17 21:00 ` Sergey Organov
2021-05-17 15:58 ` [PATCH v1 6/9] git-svn: stop passing "-m" to "git rev-list" Sergey Organov
2021-05-17 15:58 ` [PATCH v1 7/9] stash list: stop passing "-m" to "git list" Sergey Organov
2021-05-17 15:58 ` [PATCH v1 8/9] diff-merges: rename "combined_imply_patch" to "merges_imply_patch" Sergey Organov
2021-05-17 15:58 ` [PATCH v1 9/9] diff-merges: let "-m" imply "-p" Sergey Organov
2021-05-17 19:51 ` [PATCH v1 0/9] diff-merges: let -m imply -p Junio C Hamano
2021-05-17 20:11 ` Sergey Organov
2021-05-18 3:18 ` Bagas Sanjaya
2021-05-18 12:03 ` Sergey Organov
2021-05-18 12:17 ` Sergey Organov
2021-05-18 14:17 ` Junio C Hamano
2021-05-18 15:52 ` Sergey Organov
2021-05-19 11:45 ` [PATCH v2 " Sergey Organov
2021-05-19 11:45 ` [PATCH v2 1/9] t4013: test that "-m" alone has no effect in "git log" Sergey Organov
2021-05-19 11:45 ` [PATCH v2 2/9] t4013: test "git log -m --raw" Sergey Organov
2021-05-19 11:45 ` [PATCH v2 3/9] t4013: test "git log -m --stat" Sergey Organov
2021-05-19 11:45 ` [PATCH v2 4/9] t4013: test "git diff-index -m" Sergey Organov
2021-05-19 11:45 ` [PATCH v2 5/9] diff-merges: move specific diff-index "-m" handling to diff-index Sergey Organov
2021-05-19 11:45 ` [PATCH v2 6/9] git-svn: stop passing "-m" to "git rev-list" Sergey Organov
2021-05-19 11:45 ` [PATCH v2 7/9] stash list: stop passing "-m" to "git log" Sergey Organov
2021-05-19 11:45 ` [PATCH v2 8/9] diff-merges: rename "combined_imply_patch" to "merges_imply_patch" Sergey Organov
2021-05-19 11:45 ` [PATCH v2 9/9] diff-merges: let "-m" imply "-p" Sergey Organov
2021-05-20 21:46 ` [PATCH v3 00/10] diff-merges: let -m imply -p Sergey Organov
2021-05-20 21:46 ` [PATCH v3 01/10] t4013: test that "-m" alone has no effect in "git log" Sergey Organov
2021-05-20 21:46 ` [PATCH v3 02/10] t4013: test "git log -m --raw" Sergey Organov
2021-05-20 21:46 ` [PATCH v3 03/10] t4013: test "git log -m --stat" Sergey Organov
2021-05-20 21:46 ` [PATCH v3 04/10] t4013: test "git diff-tree -m" Sergey Organov
2021-05-20 21:46 ` [PATCH v3 05/10] t4013: test "git diff-index -m" Sergey Organov
2021-05-20 21:46 ` [PATCH v3 06/10] diff-merges: move specific diff-index "-m" handling to diff-index Sergey Organov
2021-05-20 21:47 ` [PATCH v3 07/10] git-svn: stop passing "-m" to "git rev-list" Sergey Organov
2021-05-20 21:47 ` [PATCH v3 08/10] stash list: stop passing "-m" to "git log" Sergey Organov
2021-05-20 21:47 ` [PATCH v3 09/10] diff-merges: rename "combined_imply_patch" to "merges_imply_patch" Sergey Organov
2021-05-20 21:47 ` [PATCH v3 10/10] diff-merges: let "-m" imply "-p" Sergey Organov
2021-08-05 3:16 ` Jonathan Nieder
2021-08-06 1:45 ` [PATCH] Revert 'diff-merges: let "-m" imply "-p"' Jonathan Nieder
2021-08-06 17:21 ` Junio C Hamano
2021-08-06 17:55 ` Junio C Hamano
2021-08-06 19:57 ` Jonathan Nieder
2021-08-08 17:55 ` Junio C Hamano
2021-08-17 9:13 ` Sergey Organov
2021-08-17 22:10 ` Junio C Hamano
2021-08-18 8:56 ` Sergey Organov
2021-08-19 18:50 ` Junio C Hamano
2021-08-19 18:51 ` Junio C Hamano
2021-08-20 10:24 ` Sergey Organov
2021-08-07 1:55 ` Jonathan Nieder
2021-08-07 6:49 ` Johannes Sixt
2021-08-07 13:51 ` Jonathan Nieder
2021-08-07 17:00 ` Junio C Hamano
2021-08-07 18:08 ` Jonathan Nieder
2021-08-08 0:42 ` Junio C Hamano
2021-08-17 9:17 ` Sergey Organov
2021-08-16 9:09 ` [PATCH v3 10/10] diff-merges: let "-m" imply "-p" Sergey Organov
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=20210510153451.15090-3-sorganov@gmail.com \
--to=sorganov@gmail.com \
--cc=alexhenrie24@gmail.com \
--cc=avarab@gmail.com \
--cc=felipe.contreras@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=philipoakley@iee.email \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).