summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 16529f2)
raw | patch | inline | side by side (parent: 16529f2)
author | Stephen Boyd <bebarino@gmail.com> | |
Mon, 6 Dec 2010 07:57:42 +0000 (23:57 -0800) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Tue, 7 Dec 2010 00:51:36 +0000 (16:51 -0800) |
parse_options_check() is being called for each invocation of
parse_options_step which can be quite a bit for some commands. The
commit introducing this function cb9d398 (parse-options: add
parse_options_check to validate option specs., 2009-06-09) had the
correct motivation and explicitly states that parse_options_check()
should be called from parse_options_start(). However, the implementation
differs from the motivation. Fix it.
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
parse_options_step which can be quite a bit for some commands. The
commit introducing this function cb9d398 (parse-options: add
parse_options_check to validate option specs., 2009-06-09) had the
correct motivation and explicitly states that parse_options_check()
should be called from parse_options_start(). However, the implementation
differs from the motivation. Fix it.
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/blame.c | patch | blob | history | |
builtin/shortlog.c | patch | blob | history | |
parse-options.c | patch | blob | history | |
parse-options.h | patch | blob | history |
diff --git a/builtin/blame.c b/builtin/blame.c
index 101535448f2b0405c280387b63f7ce82fb7dd350..a4e41b79ee655e832692435430244b23f20c8cb5 100644 (file)
--- a/builtin/blame.c
+++ b/builtin/blame.c
save_commit_buffer = 0;
dashdash_pos = 0;
- parse_options_start(&ctx, argc, argv, prefix, PARSE_OPT_KEEP_DASHDASH |
- PARSE_OPT_KEEP_ARGV0);
+ parse_options_start(&ctx, argc, argv, prefix, options,
+ PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0);
for (;;) {
switch (parse_options_step(&ctx, options, blame_opt_usage)) {
case PARSE_OPT_HELP:
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index 2135b0dde11faa0c501682ed074e0ba96bf28b42..1a21e4b0538565f7a64488ed7b3a5c317e559699 100644 (file)
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
git_config(git_default_config, NULL);
shortlog_init(&log);
init_revisions(&rev, prefix);
- parse_options_start(&ctx, argc, argv, prefix, PARSE_OPT_KEEP_DASHDASH |
- PARSE_OPT_KEEP_ARGV0);
+ parse_options_start(&ctx, argc, argv, prefix, options,
+ PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0);
for (;;) {
switch (parse_options_step(&ctx, options, shortlog_usage)) {
diff --git a/parse-options.c b/parse-options.c
index 0fa79bc31d322e2aab8fce738ca6489a35a51ca4..9bbbc6a5fec7fa3500fe5d830a188717d70ad0c5 100644 (file)
--- a/parse-options.c
+++ b/parse-options.c
void parse_options_start(struct parse_opt_ctx_t *ctx,
int argc, const char **argv, const char *prefix,
- int flags)
+ const struct option *options, int flags)
{
memset(ctx, 0, sizeof(*ctx));
ctx->argc = argc - 1;
if ((flags & PARSE_OPT_KEEP_UNKNOWN) &&
(flags & PARSE_OPT_STOP_AT_NON_OPTION))
die("STOP_AT_NON_OPTION and KEEP_UNKNOWN don't go together");
+ parse_options_check(options);
}
static int usage_with_options_internal(struct parse_opt_ctx_t *,
{
int internal_help = !(ctx->flags & PARSE_OPT_NO_INTERNAL_HELP);
- parse_options_check(options);
-
/* we must reset ->opt, unknown short option leave it dangling */
ctx->opt = NULL;
{
struct parse_opt_ctx_t ctx;
- parse_options_start(&ctx, argc, argv, prefix, flags);
+ parse_options_start(&ctx, argc, argv, prefix, options, flags);
switch (parse_options_step(&ctx, options, usagestr)) {
case PARSE_OPT_HELP:
exit(129);
diff --git a/parse-options.h b/parse-options.h
index d982f0f1bf181f00f54861eb768504007490e95d..5eb499b9923224825c330292f3ac281a4b6fa675 100644 (file)
--- a/parse-options.h
+++ b/parse-options.h
extern void parse_options_start(struct parse_opt_ctx_t *ctx,
int argc, const char **argv, const char *prefix,
- int flags);
+ const struct option *options, int flags);
extern int parse_options_step(struct parse_opt_ctx_t *ctx,
const struct option *options,