[PATCH 05/11] revert: Catch incompatible command-line options early
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
builtin/revert.c | 36 +++++++++++++++++++++++++-----------
1 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/builtin/revert.c b/builtin/revert.c
index 9381541..facae24 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -77,6 +77,24 @@ static int option_parse_x(const struct option *opt,
return 0;
}
+static void die_opt_incompatible(const char *me, const char *base_opt,
+ int nargs, int opt_bitarray[], ...)
+{
+ const char *this_opt = NULL;
+ va_list ap;
+ int i;
+
+ va_start(ap, opt_bitarray);
+ for (i = 0; i < nargs; i ++) {
+ this_opt = va_arg(ap, const char *);
+ if (opt_bitarray[i]) {
+ die(_("%s: %s cannot be used with %s"),
+ me, this_opt, base_opt);
+ }
+ }
+ va_end(ap);
+}
+
static void parse_args(int argc, const char **argv)
{
const char * const * usage_str = revert_or_cherry_pick_usage();
@@ -112,6 +130,13 @@ static void parse_args(int argc, const char **argv)
if (cmd_opts.commit_argc < 2)
usage_with_options(usage_str, options);
+ if (cmd_opts.allow_ff) {
+ int opt_bitarray[] = {cmd_opts.signoff, cmd_opts.no_commit,
+ cmd_opts.no_replay, cmd_opts.edit};
+ die_opt_incompatible(me, "--ff", 4, opt_bitarray, "--signoff",
+ "--no-commit", "-x", "--edit");
+ }
+
cmd_opts.commit_argv = argv;
}
@@ -584,17 +609,6 @@ static int pick_commits(void)
struct commit *commit;
int res;
- if (cmd_opts.allow_ff) {
- if (cmd_opts.signoff)
- die(_("cherry-pick --ff cannot be used with --signoff"));
- if (cmd_opts.no_commit)
- die(_("cherry-pick --ff cannot be used with --no-commit"));
- if (cmd_opts.no_replay)
- die(_("cherry-pick --ff cannot be used with -x"));
- if (cmd_opts.edit)
- die(_("cherry-pick --ff cannot be used with --edit"));
- }
-
if ((res = read_and_refresh_cache()) ||
(res = prepare_revs(&revs)))
return res;
--
1.7.4.rc1.7.g2cf08.dirty