All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 18/20] range-diff: use parse_options() instead of diff_opt_parse()
Date: Wed, 20 Mar 2019 18:47:01 +0700	[thread overview]
Message-ID: <20190320114703.18659-19-pclouds@gmail.com> (raw)
In-Reply-To: <20190320114703.18659-1-pclouds@gmail.com>

Diff's internal option parsing is now done with 'struct option', which
makes it possible to combine all diff options to range-diff and parse
everything all at once. Parsing code becomes simpler, and we get a
looong 'git range-diff -h'

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 builtin/range-diff.c | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/builtin/range-diff.c b/builtin/range-diff.c
index f01a0be851..784bd19321 100644
--- a/builtin/range-diff.c
+++ b/builtin/range-diff.c
@@ -16,42 +16,27 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
 	int creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT;
 	struct diff_options diffopt = { NULL };
 	int simple_color = -1;
-	struct option options[] = {
+	struct option range_diff_options[] = {
 		OPT_INTEGER(0, "creation-factor", &creation_factor,
 			    N_("Percentage by which creation is weighted")),
 		OPT_BOOL(0, "no-dual-color", &simple_color,
 			    N_("use simple diff colors")),
 		OPT_END()
 	};
-	int i, j, res = 0;
+	struct option *options;
+	int res = 0;
 	struct strbuf range1 = STRBUF_INIT, range2 = STRBUF_INIT;
 
 	git_config(git_diff_ui_config, NULL);
 
 	repo_diff_setup(the_repository, &diffopt);
 
+	options = parse_options_concat(range_diff_options, diffopt.parseopts);
 	argc = parse_options(argc, argv, NULL, options,
-			     builtin_range_diff_usage, PARSE_OPT_KEEP_UNKNOWN |
-			     PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0);
-
-	for (i = j = 1; i < argc && strcmp("--", argv[i]); ) {
-		int c = diff_opt_parse(&diffopt, argv + i, argc - i, prefix);
+			     builtin_range_diff_usage, 0);
 
-		if (!c)
-			argv[j++] = argv[i++];
-		else
-			i += c;
-	}
-	while (i < argc)
-		argv[j++] = argv[i++];
-	argc = j;
 	diff_setup_done(&diffopt);
 
-	/* Make sure that there are no unparsed options */
-	argc = parse_options(argc, argv, NULL,
-			     options + ARRAY_SIZE(options) - 1, /* OPT_END */
-			     builtin_range_diff_usage, 0);
-
 	/* force color when --dual-color was used */
 	if (!simple_color)
 		diffopt.use_color = 1;
@@ -90,6 +75,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
 		error(_("need two commit ranges"));
 		usage_with_options(builtin_range_diff_usage, options);
 	}
+	FREE_AND_NULL(options);
 
 	res = show_range_diff(range1.buf, range2.buf, creation_factor,
 			      simple_color < 1, &diffopt);
-- 
2.21.0.548.gd3c7d92dc2


  parent reply	other threads:[~2019-03-20 11:48 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-20 11:46 [PATCH 00/20] nd/diff-parseopt the last part Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 01/20] diff-parseopt: convert --ws-error-highlight Nguyễn Thái Ngọc Duy
2019-03-20 20:19   ` Martin Ågren
2019-03-20 11:46 ` [PATCH 02/20] diff-parseopt: convert --ita-[in]visible-in-index Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 03/20] diff-parseopt: convert -z Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 04/20] diff-parseopt: convert -l Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 05/20] diff-parseopt: convert -S|-G Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 06/20] diff-parseopt: convert --pickaxe-all|--pickaxe-regex Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 07/20] diff-parseopt: convert -O Nguyễn Thái Ngọc Duy
2019-03-20 20:26   ` Martin Ågren
2019-03-20 11:46 ` [PATCH 08/20] diff-parseopt: convert --find-object Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 09/20] diff-parseopt: convert --diff-filter Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 10/20] diff-parseopt: convert --[no-]abbrev Nguyễn Thái Ngọc Duy
2019-03-20 23:00   ` Ævar Arnfjörð Bjarmason
2019-03-21  0:35     ` Duy Nguyen
2019-03-20 11:46 ` [PATCH 11/20] diff-parseopt: convert --[src|dst]-prefix Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 12/20] diff-parseopt: convert --line-prefix Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 13/20] diff-parseopt: convert --no-prefix Nguyễn Thái Ngọc Duy
2019-03-20 20:30   ` Martin Ågren
2019-03-20 11:46 ` [PATCH 14/20] diff-parseopt: convert --inter-hunk-context Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 15/20] diff-parseopt: convert --[no-]color-moved Nguyễn Thái Ngọc Duy
2019-03-20 11:46 ` [PATCH 16/20] diff-parseopt: convert --color-moved-ws Nguyễn Thái Ngọc Duy
2019-03-20 11:47 ` [PATCH 17/20] diff.c: allow --no-color-moved-ws Nguyễn Thái Ngọc Duy
2019-03-20 11:47 ` Nguyễn Thái Ngọc Duy [this message]
2019-03-20 11:47 ` [PATCH 19/20] diff --no-index: use parse_options() instead of diff_opt_parse() Nguyễn Thái Ngọc Duy
2019-03-20 11:47 ` [PATCH 20/20] am: avoid diff_opt_parse() Nguyễn Thái Ngọc Duy
2019-03-24  8:19 ` [PATCH v2 00/20] nd/diff-parseopt the last part Nguyễn Thái Ngọc Duy
2019-03-24  8:19   ` [PATCH v2 01/20] diff-parseopt: convert --ws-error-highlight Nguyễn Thái Ngọc Duy
2019-03-24  8:19   ` [PATCH v2 02/20] diff-parseopt: convert --ita-[in]visible-in-index Nguyễn Thái Ngọc Duy
2019-03-24  8:19   ` [PATCH v2 03/20] diff-parseopt: convert -z Nguyễn Thái Ngọc Duy
2019-03-24  8:19   ` [PATCH v2 04/20] diff-parseopt: convert -l Nguyễn Thái Ngọc Duy
2019-03-24  8:19   ` [PATCH v2 05/20] diff-parseopt: convert -S|-G Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 06/20] diff-parseopt: convert --pickaxe-all|--pickaxe-regex Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 07/20] diff-parseopt: convert -O Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 08/20] diff-parseopt: convert --find-object Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 09/20] diff-parseopt: convert --diff-filter Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 10/20] diff-parseopt: convert --[no-]abbrev Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 11/20] diff-parseopt: convert --[src|dst]-prefix Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 12/20] diff-parseopt: convert --line-prefix Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 13/20] diff-parseopt: convert --no-prefix Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 14/20] diff-parseopt: convert --inter-hunk-context Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 15/20] diff-parseopt: convert --[no-]color-moved Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 16/20] diff-parseopt: convert --color-moved-ws Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 17/20] diff.c: allow --no-color-moved-ws Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 18/20] range-diff: use parse_options() instead of diff_opt_parse() Nguyễn Thái Ngọc Duy
2019-03-24  8:20   ` [PATCH v2 19/20] diff --no-index: " Nguyễn Thái Ngọc Duy
2019-04-30  1:02     ` Johannes Schindelin
2019-04-30  4:53       ` Duy Nguyen
2019-04-30 22:12         ` Johannes Schindelin
2019-05-01  9:53           ` Duy Nguyen
2019-05-01 18:46             ` Jeff King
2019-03-24  8:20   ` [PATCH v2 20/20] am: avoid diff_opt_parse() Nguyễn Thái Ngọc Duy

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=20190320114703.18659-19-pclouds@gmail.com \
    --to=pclouds@gmail.com \
    --cc=git@vger.kernel.org \
    /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.