]> git.ipfire.org Git - thirdparty/git.git/commitdiff
rebase: add an --am option
authorElijah Newren <newren@gmail.com>
Sat, 15 Feb 2020 21:36:34 +0000 (21:36 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sun, 16 Feb 2020 23:40:42 +0000 (15:40 -0800)
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>
Documentation/git-rebase.txt
builtin/rebase.c

index 6e2569cd8a7a712d6d994a245d45fc2766124460..93092da3bf6ab215c9c141629f6c14a17843b890 100644 (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
index a2f05f783d813319078f632b932e5460ecfcf2b9..77abe674cb9d0afb9aaf60a11d0d95d4b86b9411 100644 (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"))