From: Elijah Newren <newren@xxxxxxxxx> 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@xxxxxxxxx> --- Documentation/git-rebase.txt | 11 ++++++++++- builtin/rebase.c | 18 +++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt index f1ace07c38..cf1ac2e359 100644 --- a/Documentation/git-rebase.txt +++ b/Documentation/git-rebase.txt @@ -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 become empty (because they contain a subset of already upstream changes) or start empty. With drop @@ -372,7 +379,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. @@ -417,6 +424,7 @@ with `--keep-base` in order to drop those commits from your branch. --whitespace=<option>:: This flag is passed to the 'git apply' program (see linkgit:git-apply[1]) that applies the patch. + Implies --am. + See also INCOMPATIBLE OPTIONS below. @@ -567,6 +575,7 @@ INCOMPATIBLE OPTIONS The following options: + * --am * --whitespace * -C diff --git a/builtin/rebase.c b/builtin/rebase.c index 9e7e88b147..ab9e16b206 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -1361,6 +1361,18 @@ static int can_fast_forward(struct commit *onto, struct commit *upstream, 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) { @@ -1550,6 +1562,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, @@ -1910,7 +1926,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")) -- gitgitgadget