From: Pierre Habouzit Date: Wed, 9 Jul 2008 21:38:34 +0000 (+0200) Subject: revisions: refactor handle_revision_opt into parse_revision_opt. X-Git-Tag: v1.6.0-rc0~85^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=6b61ec0564993d2e60f7eb56c0f0fd9c313d5e2c;p=git.git revisions: refactor handle_revision_opt into parse_revision_opt. It seems we're using handle_revision_opt the same way each time, have a wrapper around it that does the 9-liner we copy each time instead. handle_revision_opt can be static in the module for now, it's always possible to make it public again if needed. Signed-off-by: Pierre Habouzit Signed-off-by: Junio C Hamano --- diff --git a/builtin-blame.c b/builtin-blame.c index 73d26c6e9..06c7de429 100644 --- a/builtin-blame.c +++ b/builtin-blame.c @@ -2305,8 +2305,6 @@ int cmd_blame(int argc, const char **argv, const char *prefix) parse_options_start(&ctx, argc, argv, PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0); for (;;) { - int n; - switch (parse_options_step(&ctx, options, blame_opt_usage)) { case PARSE_OPT_HELP: exit(129); @@ -2320,14 +2318,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) ctx.argv[0] = "--children"; reverse = 1; } - n = handle_revision_opt(&revs, ctx.argc, ctx.argv, - &ctx.cpidx, ctx.out); - if (n <= 0) { - error("unknown option `%s'", ctx.argv[0]); - usage_with_options(blame_opt_usage, options); - } - ctx.argv += n; - ctx.argc -= n; + parse_revision_opt(&revs, &ctx, options, blame_opt_usage); } parse_done: argc = parse_options_end(&ctx); diff --git a/builtin-shortlog.c b/builtin-shortlog.c index 9107bffb9..01362022c 100644 --- a/builtin-shortlog.c +++ b/builtin-shortlog.c @@ -255,21 +255,13 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix) PARSE_OPT_KEEP_ARGV0); for (;;) { - int n; switch (parse_options_step(&ctx, options, shortlog_usage)) { case PARSE_OPT_HELP: exit(129); case PARSE_OPT_DONE: goto parse_done; } - n = handle_revision_opt(&rev, ctx.argc, ctx.argv, - &ctx.cpidx, ctx.out); - if (n <= 0) { - error("unknown option `%s'", ctx.argv[0]); - usage_with_options(shortlog_usage, options); - } - ctx.argv += n; - ctx.argc -= n; + parse_revision_opt(&rev, &ctx, options, shortlog_usage); } parse_done: argc = parse_options_end(&ctx); diff --git a/revision.c b/revision.c index 4b6925be0..93918da66 100644 --- a/revision.c +++ b/revision.c @@ -957,8 +957,8 @@ static void add_ignore_packed(struct rev_info *revs, const char *name) revs->ignore_packed[num] = NULL; } -int handle_revision_opt(struct rev_info *revs, int argc, const char **argv, - int *unkc, const char **unkv) +static int handle_revision_opt(struct rev_info *revs, int argc, const char **argv, + int *unkc, const char **unkv) { const char *arg = argv[0]; @@ -1163,6 +1163,20 @@ int handle_revision_opt(struct rev_info *revs, int argc, const char **argv, return 1; } +void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx, + const struct option *options, + const char * const usagestr[]) +{ + int n = handle_revision_opt(revs, ctx->argc, ctx->argv, + &ctx->cpidx, ctx->out); + if (n <= 0) { + error("unknown option `%s'", ctx->argv[0]); + usage_with_options(usagestr, options); + } + ctx->argv += n; + ctx->argc -= n; +} + /* * Parse revision information, filling in the "rev_info" structure, * and removing the used arguments from the argument list. diff --git a/revision.h b/revision.h index c44498e3b..15dc14925 100644 --- a/revision.h +++ b/revision.h @@ -1,6 +1,8 @@ #ifndef REVISION_H #define REVISION_H +#include "parse-options.h" + #define SEEN (1u<<0) #define UNINTERESTING (1u<<1) #define TREESAME (1u<<2) @@ -119,8 +121,9 @@ volatile show_early_output_fn_t show_early_output; extern void init_revisions(struct rev_info *revs, const char *prefix); extern int setup_revisions(int argc, const char **argv, struct rev_info *revs, const char *def); -extern int handle_revision_opt(struct rev_info *revs, int argc, const char **argv, - int *unkc, const char **unkv); +extern void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx, + const struct option *options, + const char * const usagestr[]); extern int handle_revision_arg(const char *arg, struct rev_info *revs,int flags,int cant_be_filename); extern int prepare_revision_walk(struct rev_info *revs);