Browse Source

Make builtin-revert.c use parse_options.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
maint
Pierre Habouzit 17 years ago committed by Junio C Hamano
parent
commit
f81037947c
  1. 67
      builtin-revert.c

67
builtin-revert.c

@ -7,6 +7,7 @@
#include "run-command.h" #include "run-command.h"
#include "exec_cmd.h" #include "exec_cmd.h"
#include "utf8.h" #include "utf8.h"
#include "parse-options.h"


/* /*
* This implements the builtins revert and cherry-pick. * This implements the builtins revert and cherry-pick.
@ -19,51 +20,42 @@
* Copyright (c) 2005 Junio C Hamano * Copyright (c) 2005 Junio C Hamano
*/ */


static const char *revert_usage = "git-revert [--edit | --no-edit] [-n] <commit-ish>"; static const char * const revert_usage[] = {
"git-revert [options] <commit-ish>",
NULL
};


static const char *cherry_pick_usage = "git-cherry-pick [--edit] [-n] [-r] [-x] <commit-ish>"; static const char * const cherry_pick_usage[] = {
"git-cherry-pick [options] <commit-ish>",
NULL
};


static int edit; static int edit, no_replay, no_commit, needed_deref;
static int replay;
static enum { REVERT, CHERRY_PICK } action; static enum { REVERT, CHERRY_PICK } action;
static int no_commit;
static struct commit *commit; static struct commit *commit;
static int needed_deref;


static const char *me; static const char *me;


#define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION" #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"


static void parse_options(int argc, const char **argv) static void parse_args(int argc, const char **argv)
{ {
const char *usage_str = action == REVERT ? const char * const * usage_str =
revert_usage : cherry_pick_usage; action == REVERT ? revert_usage : cherry_pick_usage;
unsigned char sha1[20]; unsigned char sha1[20];
const char *arg; const char *arg;
int i; int noop;

struct option options[] = {
if (argc < 2) OPT_BOOLEAN('n', "no-commit", &no_commit, "don't automatically commit"),
usage(usage_str); OPT_BOOLEAN('e', "edit", &edit, "edit the commit message"),

OPT_BOOLEAN('x', NULL, &no_replay, "append commit name when cherry-picking"),
for (i = 1; i < argc; i++) { OPT_BOOLEAN('r', NULL, &noop, "no-op (backward compatibility)"),
arg = argv[i]; OPT_END(),
if (arg[0] != '-') };
break;
if (!strcmp(arg, "-n") || !strcmp(arg, "--no-commit")) if (parse_options(argc, argv, options, usage_str, 0) != 1)
no_commit = 1; usage_with_options(usage_str, options);
else if (!strcmp(arg, "-e") || !strcmp(arg, "--edit")) arg = argv[0];
edit = 1;
else if (!strcmp(arg, "--no-edit"))
edit = 0;
else if (!strcmp(arg, "-x") || !strcmp(arg, "--i-really-want-"
"to-expose-my-private-commit-object-name"))
replay = 0;
else if (strcmp(arg, "-r"))
usage(usage_str);
}
if (i != argc - 1)
usage(usage_str);
arg = argv[argc - 1];
if (get_sha1(arg, sha1)) if (get_sha1(arg, sha1))
die ("Cannot find '%s'", arg); die ("Cannot find '%s'", arg);
commit = (struct commit *)parse_object(sha1); commit = (struct commit *)parse_object(sha1);
@ -243,10 +235,10 @@ static int revert_or_cherry_pick(int argc, const char **argv)
git_config(git_default_config); git_config(git_default_config);
me = action == REVERT ? "revert" : "cherry-pick"; me = action == REVERT ? "revert" : "cherry-pick";
setenv(GIT_REFLOG_ACTION, me, 0); setenv(GIT_REFLOG_ACTION, me, 0);
parse_options(argc, argv); parse_args(argc, argv);


/* this is copied from the shell script, but it's never triggered... */ /* this is copied from the shell script, but it's never triggered... */
if (action == REVERT && replay) if (action == REVERT && !no_replay)
die("revert is incompatible with replay"); die("revert is incompatible with replay");


if (no_commit) { if (no_commit) {
@ -310,7 +302,7 @@ static int revert_or_cherry_pick(int argc, const char **argv)
next = commit; next = commit;
set_author_ident_env(message); set_author_ident_env(message);
add_message_to_msg(message); add_message_to_msg(message);
if (!replay) { if (no_replay) {
add_to_msg("(cherry picked from commit "); add_to_msg("(cherry picked from commit ");
add_to_msg(sha1_to_hex(commit->object.sha1)); add_to_msg(sha1_to_hex(commit->object.sha1));
add_to_msg(")\n"); add_to_msg(")\n");
@ -388,13 +380,14 @@ int cmd_revert(int argc, const char **argv, const char *prefix)
{ {
if (isatty(0)) if (isatty(0))
edit = 1; edit = 1;
no_replay = 1;
action = REVERT; action = REVERT;
return revert_or_cherry_pick(argc, argv); return revert_or_cherry_pick(argc, argv);
} }


int cmd_cherry_pick(int argc, const char **argv, const char *prefix) int cmd_cherry_pick(int argc, const char **argv, const char *prefix)
{ {
replay = 1; no_replay = 0;
action = CHERRY_PICK; action = CHERRY_PICK;
return revert_or_cherry_pick(argc, argv); return revert_or_cherry_pick(argc, argv);
} }

Loading…
Cancel
Save