From: Ramkumar Ramachandra <artagnon@gmail.com>
To: Git List <git@vger.kernel.org>
Cc: Jonathan Nieder <jrnieder@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Daniel Barkalow <barkalow@iabervon.org>,
Christian Couder <christian.couder@gmail.com>
Subject: [PATCH 09/10] revert: Implement parsing --continue, --abort and --skip
Date: Thu, 26 May 2011 15:53:52 +0000 [thread overview]
Message-ID: <1306425233-504-10-git-send-email-artagnon@gmail.com> (raw)
In-Reply-To: <1306425233-504-1-git-send-email-artagnon@gmail.com>
Introduce three new command-line options: --continue, --abort, and
--skip resembling the correspoding options in "rebase -i". For now,
just parse the options into the replay_opts structure, making sure
that two of them are not specified together. They will actually be
implemented later in the series.
Mentored-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
builtin/revert.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 70 insertions(+), 1 deletions(-)
diff --git a/builtin/revert.c b/builtin/revert.c
index 306f5b0..f33d40a 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -47,6 +47,11 @@ static const char *me;
struct replay_opts {
enum { REVERT, CHERRY_PICK } action;
+ /* --abort, --skip, and --continue */
+ int abort_oper;
+ int skip_oper;
+ int continue_oper;
+
/* Boolean options */
int edit;
int record_origin;
@@ -103,11 +108,36 @@ static void verify_opt_compatible(const char *me, const char *base_opt, ...)
va_end(ap);
}
+static void verify_opt_mutually_compatible(const char *me, ...)
+{
+ const char *opt1, *opt2;
+ va_list ap;
+ int set;
+
+ va_start(ap, me);
+ while ((opt1 = va_arg(ap, const char *))) {
+ set = va_arg(ap, int);
+ if (set)
+ break;
+ }
+ if (!opt1) return;
+ while ((opt2 = va_arg(ap, const char *))) {
+ set = va_arg(ap, int);
+ if (set)
+ die(_("%s: %s cannot be used with %s"),
+ me, opt1, opt2);
+ }
+ va_end(ap);
+}
+
static void parse_args(int argc, const char **argv, struct replay_opts *opts)
{
const char * const * usage_str = revert_or_cherry_pick_usage(opts);
int noop;
struct option options[] = {
+ OPT_BOOLEAN(0, "abort", &opts->abort_oper, "abort the current operation"),
+ OPT_BOOLEAN(0, "skip", &opts->skip_oper, "skip the current commit"),
+ OPT_BOOLEAN(0, "continue", &opts->continue_oper, "continue the current operation"),
OPT_BOOLEAN('n', "no-commit", &opts->no_commit, "don't automatically commit"),
OPT_BOOLEAN('e', "edit", &opts->edit, "edit the commit message"),
{ OPTION_BOOLEAN, 'r', NULL, &noop, NULL, "no-op (backward compatibility)",
@@ -136,7 +166,37 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)
opts->commit_argc = parse_options(argc, argv, NULL, options, usage_str,
PARSE_OPT_KEEP_ARGV0 |
PARSE_OPT_KEEP_UNKNOWN);
- if (opts->commit_argc < 2)
+
+ /* Check for mutually incompatible command line arguments */
+ verify_opt_mutually_compatible(me,
+ "--abort", opts->abort_oper,
+ "--skip", opts->skip_oper,
+ "--continue", opts->continue_oper,
+ NULL);
+
+ /* Check for incompatible command line arguments */
+ if (opts->abort_oper || opts->skip_oper || opts->continue_oper) {
+ char *this_oper;
+ if (opts->abort_oper)
+ this_oper = "--abort";
+ else if (opts->skip_oper)
+ this_oper = "--skip";
+ else
+ this_oper = "--continue";
+
+ verify_opt_compatible(me, this_oper,
+ "--no-commit", opts->no_commit,
+ "--edit", opts->edit,
+ "--signoff", opts->signoff,
+ "--mainline", opts->mainline,
+ "--strategy", opts->strategy ? 1 : 0,
+ "--strategy-option", opts->xopts ? 1 : 0,
+ "-x", opts->record_origin,
+ "--ff", opts->allow_ff,
+ NULL);
+ }
+
+ else if (opts->commit_argc < 2)
usage_with_options(usage_str, options);
if (opts->allow_ff)
@@ -146,6 +206,15 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)
"-x", opts->record_origin,
"--edit", opts->edit,
NULL);
+
+ /* Remove these when the options are actually implemented */
+ if (opts->abort_oper)
+ die("--abort is not implemented yet");
+ if (opts->skip_oper)
+ die("--skip is not implemented yet");
+ if (opts->continue_oper)
+ die("--continue is not implemented yet");
+
opts->commit_argv = argv;
}
--
1.7.5.GIT
next prev parent reply other threads:[~2011-05-26 15:54 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-25 14:16 [PATCH v3 00/10] Sequencer Foundations Ramkumar Ramachandra
2011-05-25 14:16 ` [PATCH 01/10] advice: Introduce error_resolve_conflict Ramkumar Ramachandra
2011-05-25 14:16 ` [PATCH 02/10] revert: Propogate errors upwards from do_pick_commit Ramkumar Ramachandra
2011-05-25 22:44 ` Junio C Hamano
2011-05-26 9:34 ` Ramkumar Ramachandra
2011-05-25 14:16 ` [PATCH 03/10] revert: Eliminate global "commit" variable Ramkumar Ramachandra
2011-05-25 23:10 ` Junio C Hamano
2011-05-25 14:16 ` [PATCH 04/10] revert: Rename no_replay to record_origin Ramkumar Ramachandra
2011-05-25 14:17 ` [PATCH 05/10] revert: Introduce struct to keep command-line options Ramkumar Ramachandra
2011-05-25 14:17 ` [PATCH 06/10] revert: Separate cmdline parsing from functional code Ramkumar Ramachandra
2011-05-25 14:17 ` [PATCH 07/10] revert: Catch incompatible command-line options early Ramkumar Ramachandra
2011-05-25 14:17 ` [PATCH 08/10] revert: Introduce HEAD, TODO files to persist state, plan Ramkumar Ramachandra
2011-05-25 14:17 ` [PATCH 09/10] revert: Implement parsing --continue, --abort and --skip Ramkumar Ramachandra
2011-05-25 14:17 ` [PATCH 10/10] revert: Implement --abort processing Ramkumar Ramachandra
2011-05-25 23:15 ` [PATCH v3 00/10] Sequencer Foundations Junio C Hamano
2011-05-26 15:53 ` [PATCH v4 " Ramkumar Ramachandra
2011-05-26 15:53 ` [PATCH 01/10] advice: Introduce error_resolve_conflict Ramkumar Ramachandra
2011-05-26 15:53 ` [PATCH 02/10] revert: Propogate errors upwards from do_pick_commit Ramkumar Ramachandra
2011-05-26 15:53 ` [PATCH 03/10] revert: Eliminate global "commit" variable Ramkumar Ramachandra
2011-05-26 15:53 ` [PATCH 04/10] revert: Rename no_replay to record_origin Ramkumar Ramachandra
2011-05-26 15:53 ` [PATCH 05/10] revert: Introduce struct to keep command-line options Ramkumar Ramachandra
2011-05-26 15:53 ` [PATCH 06/10] revert: Separate cmdline parsing from functional code Ramkumar Ramachandra
2011-05-26 15:53 ` [PATCH 07/10] revert: Catch incompatible command-line options early Ramkumar Ramachandra
2011-05-26 15:53 ` [PATCH 08/10] revert: Introduce HEAD, TODO files to persist state, plan Ramkumar Ramachandra
2011-05-26 16:11 ` Jonathan Nieder
2011-05-26 16:26 ` Ramkumar Ramachandra
2011-05-26 17:05 ` Ramkumar Ramachandra
2011-05-26 21:03 ` Junio C Hamano
2011-06-01 15:28 ` Ramkumar Ramachandra
2011-06-01 19:31 ` Jonathan Nieder
2011-06-02 12:53 ` Ramkumar Ramachandra
2011-06-02 14:29 ` Jeff King
2011-06-08 13:14 ` Ramkumar Ramachandra
2011-05-26 15:53 ` Ramkumar Ramachandra [this message]
2011-05-26 15:53 ` [PATCH 10/10] revert: Implement --abort processing Ramkumar Ramachandra
2011-05-26 19:13 ` [PATCH v4 00/10] Sequencer Foundations Junio C Hamano
2011-05-27 7:22 ` Ramkumar Ramachandra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1306425233-504-10-git-send-email-artagnon@gmail.com \
--to=artagnon@gmail.com \
--cc=barkalow@iabervon.org \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).