Skip to content

Commit

Permalink
revisions: refactor handle_revision_opt into parse_revision_opt.
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
MadCoder authored and gitster committed Jul 9, 2008
1 parent 14ec9cb commit 6b61ec0
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 23 deletions.
11 changes: 1 addition & 10 deletions builtin-blame.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
10 changes: 1 addition & 9 deletions builtin-shortlog.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
18 changes: 16 additions & 2 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];

Expand Down Expand Up @@ -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.
Expand Down
7 changes: 5 additions & 2 deletions revision.h
Original file line number Diff line number Diff line change
@@ -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)
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 6b61ec0

Please sign in to comment.