rebase: add an --am option

Currently, this option doesn't do anything except error out if any
options requiring the interactive-backend are also passed.  However,
when we make the default backend configurable later in this series, this
flag will provide a way to override the config setting.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Elijah Newren 2020-02-15 21:36:34 +00:00 committed by Junio C Hamano
parent 8af14f0859
commit 52eb738d6b
2 changed files with 27 additions and 2 deletions

View File

@ -258,6 +258,13 @@ See also INCOMPATIBLE OPTIONS below.
original branch. The index and working tree are also left
unchanged as a result.
--am:
Use git-am internally to rebase. This option may become a
no-op in the future once the interactive backend handles
everything the am one does.
+
See also INCOMPATIBLE OPTIONS below.
--empty={drop,keep,ask}::
How to handle commits that are not empty to start and are not
clean cherry-picks of any upstream commit, but which become
@ -378,7 +385,7 @@ See also INCOMPATIBLE OPTIONS below.
Ensure at least <n> lines of surrounding context match before
and after each change. When fewer lines of surrounding
context exist they all must match. By default no context is
ever ignored.
ever ignored. Implies --am.
+
See also INCOMPATIBLE OPTIONS below.
@ -418,6 +425,7 @@ with `--keep-base` in order to drop those commits from your branch.
--whitespace=<option>::
These flags are passed to the 'git apply' program
(see linkgit:git-apply[1]) that applies the patch.
Implies --am.
+
See also INCOMPATIBLE OPTIONS below.
@ -561,6 +569,7 @@ INCOMPATIBLE OPTIONS
The following options:
* --am
* --committer-date-is-author-date
* --ignore-date
* --ignore-whitespace

View File

@ -1335,6 +1335,18 @@ done:
return res && is_linear_history(onto, head);
}
static int parse_opt_am(const struct option *opt, const char *arg, int unset)
{
struct rebase_options *opts = opt->value;
BUG_ON_OPT_NEG(unset);
BUG_ON_OPT_ARG(arg);
opts->type = REBASE_AM;
return 0;
}
/* -i followed by -m is still -i */
static int parse_opt_merge(const struct option *opt, const char *arg, int unset)
{
@ -1519,6 +1531,10 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
OPT_CMDMODE(0, "show-current-patch", &action,
N_("show the patch file being applied or merged"),
ACTION_SHOW_CURRENT_PATCH),
{ OPTION_CALLBACK, 0, "am", &options, NULL,
N_("use apply-mail strategies to rebase"),
PARSE_OPT_NOARG | PARSE_OPT_NONEG,
parse_opt_am },
{ OPTION_CALLBACK, 'm', "merge", &options, NULL,
N_("use merging strategies to rebase"),
PARSE_OPT_NOARG | PARSE_OPT_NONEG,
@ -1878,7 +1894,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
if (isatty(2) && options.flags & REBASE_NO_QUIET)
strbuf_addstr(&options.git_format_patch_opt, " --progress");
if (options.git_am_opts.argc) {
if (options.git_am_opts.argc || options.type == REBASE_AM) {
/* all am options except -q are compatible only with --am */
for (i = options.git_am_opts.argc - 1; i >= 0; i--)
if (strcmp(options.git_am_opts.argv[i], "-q"))