diff options
| author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2022-08-26 09:39:29 +0000 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2022-08-26 09:49:25 -0700 |
| commit | 0087d7dfbebf10f23394f32db3c283eb7ab03129 (patch) | |
| tree | 8ac7f36f2ba746af517f24013c967d96cd38ebbd /builtin/range-diff.c | |
| parent | edd6a31f46096824f792f0fad5532c8d444c4c05 (diff) | |
range-diff: consistently validate the arguments
This patch lets `range-diff` validate the arguments not only when
invoked with one or two arguments, but also in the code path where three
arguments are handled.
While at it, we now use `usage_msg_opt*()` consistently.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/range-diff.c')
| -rw-r--r-- | builtin/range-diff.c | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/builtin/range-diff.c b/builtin/range-diff.c index f8d3869d35..71319ed1d8 100644 --- a/builtin/range-diff.c +++ b/builtin/range-diff.c @@ -40,6 +40,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix) struct option *options; int res = 0; struct strbuf range1 = STRBUF_INIT, range2 = STRBUF_INIT; + struct object_id oid; git_config(git_diff_ui_config, NULL); @@ -56,24 +57,41 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix) diffopt.use_color = 1; if (argc == 3) { + if (get_oid_committish(argv[0], &oid)) + usage_msg_optf(_("not a revision: '%s'"), + builtin_range_diff_usage, options, + argv[0]); + else if (get_oid_committish(argv[1], &oid)) + usage_msg_optf(_("not a revision: '%s'"), + builtin_range_diff_usage, options, + argv[1]); + else if (get_oid_committish(argv[2], &oid)) + usage_msg_optf(_("not a revision: '%s'"), + builtin_range_diff_usage, options, + argv[2]); + strbuf_addf(&range1, "%s..%s", argv[0], argv[1]); strbuf_addf(&range2, "%s..%s", argv[0], argv[2]); } else if (argc == 2) { if (!is_range_diff_range(argv[0])) - die(_("not a commit range: '%s'"), argv[0]); - strbuf_addstr(&range1, argv[0]); + usage_msg_optf(_("not a commit range: '%s'"), + builtin_range_diff_usage, options, + argv[0]); + else if (!is_range_diff_range(argv[1])) + usage_msg_optf(_("not a commit range: '%s'"), + builtin_range_diff_usage, options, + argv[1]); - if (!is_range_diff_range(argv[1])) - die(_("not a commit range: '%s'"), argv[1]); + strbuf_addstr(&range1, argv[0]); strbuf_addstr(&range2, argv[1]); } else if (argc == 1) { const char *b = strstr(argv[0], "..."), *a = argv[0]; int a_len; - if (!b) { - error(_("single arg format must be symmetric range")); - usage_with_options(builtin_range_diff_usage, options); - } + if (!b) + usage_msg_optf(_("not a symmetric range: '%s'"), + builtin_range_diff_usage, options, + argv[0]); a_len = (int)(b - a); if (!a_len) { @@ -85,10 +103,9 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix) b = "HEAD"; strbuf_addf(&range1, "%s..%.*s", b, a_len, a); strbuf_addf(&range2, "%.*s..%s", a_len, a, b); - } else { - error(_("need two commit ranges")); - usage_with_options(builtin_range_diff_usage, options); - } + } else + usage_msg_opt(_("need two commit ranges"), + builtin_range_diff_usage, options); FREE_AND_NULL(options); range_diff_opts.dual_color = simple_color < 1; |
