From: Junio C Hamano Date: Sun, 4 Nov 2007 08:26:02 +0000 (-0700) Subject: Merge branch 'jc/revert-merge' X-Git-Tag: v1.5.4-rc0~273 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=02273fdbd07ddaa13a232db0ae63a720c4a013f0;p=git.git Merge branch 'jc/revert-merge' * jc/revert-merge: cherry-pick/revert -m: add tests revert/cherry-pick: work on merge commits as well Conflicts: builtin-revert.c --- 02273fdbd07ddaa13a232db0ae63a720c4a013f0 diff --cc builtin-revert.c index a9347cf9c,bfed69d7e..62ab1fa1f --- a/builtin-revert.c +++ b/builtin-revert.c @@@ -20,42 -19,58 +20,44 @@@ * Copyright (c) 2005 Junio C Hamano */ -static const char *revert_usage = "git-revert [--edit | --no-edit] [-n] [-m parent-number] "; +static const char * const revert_usage[] = { + "git-revert [options] ", + NULL +}; -static const char *cherry_pick_usage = "git-cherry-pick [--edit] [-n] [-m parent-number] [-r] [-x] "; +static const char * const cherry_pick_usage[] = { + "git-cherry-pick [options] ", + NULL +}; - static int edit, no_replay, no_commit, needed_deref; -static int edit; -static int replay; ++static int edit, no_replay, no_commit, needed_deref, mainline; static enum { REVERT, CHERRY_PICK } action; -static int no_commit; static struct commit *commit; -static int needed_deref; -static int mainline; static const char *me; #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 ? - revert_usage : cherry_pick_usage; + const char * const * usage_str = + action == REVERT ? revert_usage : cherry_pick_usage; unsigned char sha1[20]; const char *arg; - int i; + int noop; + struct option options[] = { + OPT_BOOLEAN('n', "no-commit", &no_commit, "don't automatically commit"), + OPT_BOOLEAN('e', "edit", &edit, "edit the commit message"), + OPT_BOOLEAN('x', NULL, &no_replay, "append commit name when cherry-picking"), + OPT_BOOLEAN('r', NULL, &noop, "no-op (backward compatibility)"), ++ OPT_INTEGER('m', "mainline", &mainline, "parent number"), + OPT_END(), + }; + + if (parse_options(argc, argv, options, usage_str, 0) != 1) + usage_with_options(usage_str, options); + arg = argv[0]; + - if (argc < 2) - usage(usage_str); - - for (i = 1; i < argc; i++) { - arg = argv[i]; - if (arg[0] != '-') - break; - if (!strcmp(arg, "-n") || !strcmp(arg, "--no-commit")) - no_commit = 1; - else if (!strcmp(arg, "-e") || !strcmp(arg, "--edit")) - 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, "-m") || !strcmp(arg, "--mainline")) { - if (++i >= argc || - strtol_i(argv[i], 10, &mainline) || - mainline <= 0) - usage(usage_str); - } - else if (strcmp(arg, "-r")) - usage(usage_str); - } - if (i != argc - 1) - usage(usage_str); - arg = argv[argc - 1]; if (get_sha1(arg, sha1)) die ("Cannot find '%s'", arg); commit = (struct commit *)parse_object(sha1);