Skip to content

Commit

Permalink
rebase: add an --am option
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
newren authored and gitster committed Feb 16, 2020
1 parent 8af14f0 commit 52eb738
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
11 changes: 10 additions & 1 deletion Documentation/git-rebase.txt
Expand Up @@ -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
Expand Down Expand Up @@ -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.

Expand Down Expand Up @@ -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.

Expand Down Expand Up @@ -561,6 +569,7 @@ INCOMPATIBLE OPTIONS

The following options:

* --am
* --committer-date-is-author-date
* --ignore-date
* --ignore-whitespace
Expand Down
18 changes: 17 additions & 1 deletion builtin/rebase.c
Expand Up @@ -1335,6 +1335,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)
{
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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"))
Expand Down

0 comments on commit 52eb738

Please sign in to comment.