зеркало из https://github.com/microsoft/git.git
Merge branch 'sb/parse-options-integer'
* sb/parse-options-integer: parse-options: simplify usage argh handling parse-options: make OPT_INTEGER's argh explicit
This commit is contained in:
Коммит
d978ead4c3
|
@ -3277,9 +3277,11 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
|
|||
OPT_BOOLEAN(0, "stat", &diffstat,
|
||||
"instead of applying the patch, output diffstat for the input"),
|
||||
{ OPTION_BOOLEAN, 0, "allow-binary-replacement", &binary,
|
||||
NULL, "old option, now no-op", PARSE_OPT_HIDDEN },
|
||||
NULL, "old option, now no-op",
|
||||
PARSE_OPT_HIDDEN | PARSE_OPT_NOARG },
|
||||
{ OPTION_BOOLEAN, 0, "binary", &binary,
|
||||
NULL, "old option, now no-op", PARSE_OPT_HIDDEN },
|
||||
NULL, "old option, now no-op",
|
||||
PARSE_OPT_HIDDEN | PARSE_OPT_NOARG },
|
||||
OPT_BOOLEAN(0, "numstat", &numstat,
|
||||
"shows number of added and deleted lines in decimal notation"),
|
||||
OPT_BOOLEAN(0, "summary", &summary,
|
||||
|
|
|
@ -376,8 +376,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
|
|||
struct commit_list *with_commit = NULL;
|
||||
struct option options[] = {
|
||||
OPT_BOOLEAN('l', NULL, &list, "list tag names"),
|
||||
{ OPTION_INTEGER, 'n', NULL, &lines, NULL,
|
||||
"print n lines of each tag message",
|
||||
{ OPTION_INTEGER, 'n', NULL, &lines, "n",
|
||||
"print <n> lines of each tag message",
|
||||
PARSE_OPT_OPTARG, NULL, 1 },
|
||||
OPT_BOOLEAN('d', NULL, &delete, "delete tags"),
|
||||
OPT_BOOLEAN('v', NULL, &verify, "verify tags"),
|
||||
|
|
|
@ -464,7 +464,7 @@ int parse_options(int argc, const char **argv, const char *prefix,
|
|||
static int usage_argh(const struct option *opts)
|
||||
{
|
||||
const char *s;
|
||||
int literal = opts->flags & PARSE_OPT_LITERAL_ARGHELP;
|
||||
int literal = (opts->flags & PARSE_OPT_LITERAL_ARGHELP) || !opts->argh;
|
||||
if (opts->flags & PARSE_OPT_OPTARG)
|
||||
if (opts->long_name)
|
||||
s = literal ? "[=%s]" : "[=<%s>]";
|
||||
|
@ -472,7 +472,7 @@ static int usage_argh(const struct option *opts)
|
|||
s = literal ? "[%s]" : "[<%s>]";
|
||||
else
|
||||
s = literal ? " %s" : " <%s>";
|
||||
return fprintf(stderr, s, opts->argh);
|
||||
return fprintf(stderr, s, opts->argh ? opts->argh : "...");
|
||||
}
|
||||
|
||||
#define USAGE_OPTS_WIDTH 24
|
||||
|
@ -524,40 +524,8 @@ int usage_with_options_internal(const char * const *usagestr,
|
|||
if (opts->type == OPTION_NUMBER)
|
||||
pos += fprintf(stderr, "-NUM");
|
||||
|
||||
switch (opts->type) {
|
||||
case OPTION_ARGUMENT:
|
||||
break;
|
||||
case OPTION_INTEGER:
|
||||
if (opts->flags & PARSE_OPT_OPTARG)
|
||||
if (opts->long_name)
|
||||
pos += fprintf(stderr, "[=<n>]");
|
||||
else
|
||||
pos += fprintf(stderr, "[<n>]");
|
||||
else
|
||||
pos += fprintf(stderr, " <n>");
|
||||
break;
|
||||
case OPTION_CALLBACK:
|
||||
if (opts->flags & PARSE_OPT_NOARG)
|
||||
break;
|
||||
/* FALLTHROUGH */
|
||||
case OPTION_FILENAME:
|
||||
/* FALLTHROUGH */
|
||||
case OPTION_STRING:
|
||||
if (opts->argh)
|
||||
pos += usage_argh(opts);
|
||||
else {
|
||||
if (opts->flags & PARSE_OPT_OPTARG)
|
||||
if (opts->long_name)
|
||||
pos += fprintf(stderr, "[=...]");
|
||||
else
|
||||
pos += fprintf(stderr, "[...]");
|
||||
else
|
||||
pos += fprintf(stderr, " ...");
|
||||
}
|
||||
break;
|
||||
default: /* OPTION_{BIT,BOOLEAN,NUMBER,SET_INT,SET_PTR} */
|
||||
break;
|
||||
}
|
||||
if (!(opts->flags & PARSE_OPT_NOARG))
|
||||
pos += usage_argh(opts);
|
||||
|
||||
if (pos <= USAGE_OPTS_WIDTH)
|
||||
pad = USAGE_OPTS_WIDTH - pos;
|
||||
|
|
|
@ -67,7 +67,7 @@ typedef int parse_opt_cb(const struct option *, const char *arg, int unset);
|
|||
* `flags`::
|
||||
* mask of parse_opt_option_flags.
|
||||
* PARSE_OPT_OPTARG: says that the argument is optional (not for BOOLEANs)
|
||||
* PARSE_OPT_NOARG: says that this option takes no argument, for CALLBACKs
|
||||
* PARSE_OPT_NOARG: says that this option takes no argument
|
||||
* PARSE_OPT_NONEG: says that this option cannot be negated
|
||||
* PARSE_OPT_HIDDEN: this option is skipped in the default usage, and
|
||||
* shown only in the full usage.
|
||||
|
@ -104,14 +104,20 @@ struct option {
|
|||
};
|
||||
|
||||
#define OPT_END() { OPTION_END }
|
||||
#define OPT_ARGUMENT(l, h) { OPTION_ARGUMENT, 0, (l), NULL, NULL, (h) }
|
||||
#define OPT_ARGUMENT(l, h) { OPTION_ARGUMENT, 0, (l), NULL, NULL, \
|
||||
(h), PARSE_OPT_NOARG}
|
||||
#define OPT_GROUP(h) { OPTION_GROUP, 0, NULL, NULL, NULL, (h) }
|
||||
#define OPT_BIT(s, l, v, h, b) { OPTION_BIT, (s), (l), (v), NULL, (h), 0, NULL, (b) }
|
||||
#define OPT_NEGBIT(s, l, v, h, b) { OPTION_NEGBIT, (s), (l), (v), NULL, (h), 0, NULL, (b) }
|
||||
#define OPT_BOOLEAN(s, l, v, h) { OPTION_BOOLEAN, (s), (l), (v), NULL, (h) }
|
||||
#define OPT_SET_INT(s, l, v, h, i) { OPTION_SET_INT, (s), (l), (v), NULL, (h), 0, NULL, (i) }
|
||||
#define OPT_SET_PTR(s, l, v, h, p) { OPTION_SET_PTR, (s), (l), (v), NULL, (h), 0, NULL, (p) }
|
||||
#define OPT_INTEGER(s, l, v, h) { OPTION_INTEGER, (s), (l), (v), NULL, (h) }
|
||||
#define OPT_BIT(s, l, v, h, b) { OPTION_BIT, (s), (l), (v), NULL, (h), \
|
||||
PARSE_OPT_NOARG, NULL, (b) }
|
||||
#define OPT_NEGBIT(s, l, v, h, b) { OPTION_NEGBIT, (s), (l), (v), NULL, \
|
||||
(h), PARSE_OPT_NOARG, NULL, (b) }
|
||||
#define OPT_BOOLEAN(s, l, v, h) { OPTION_BOOLEAN, (s), (l), (v), NULL, \
|
||||
(h), PARSE_OPT_NOARG }
|
||||
#define OPT_SET_INT(s, l, v, h, i) { OPTION_SET_INT, (s), (l), (v), NULL, \
|
||||
(h), PARSE_OPT_NOARG, NULL, (i) }
|
||||
#define OPT_SET_PTR(s, l, v, h, p) { OPTION_SET_PTR, (s), (l), (v), NULL, \
|
||||
(h), PARSE_OPT_NOARG, NULL, (p) }
|
||||
#define OPT_INTEGER(s, l, v, h) { OPTION_INTEGER, (s), (l), (v), "n", (h) }
|
||||
#define OPT_STRING(s, l, v, a, h) { OPTION_STRING, (s), (l), (v), (a), (h) }
|
||||
#define OPT_DATE(s, l, v, h) \
|
||||
{ OPTION_CALLBACK, (s), (l), (v), "time",(h), 0, \
|
||||
|
|
Загрузка…
Ссылка в новой задаче