builtin rebase: support `fork-point` option
authorPratik Karki <predatoramigo@gmail.com>
Tue, 4 Sep 2018 22:00:09 +0000 (15:00 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 11 Oct 2018 05:12:45 +0000 (14:12 +0900)
This commit adds support for `--fork-point` and `--no-fork-point`.
This is converted as-is from `git-legacy-rebase.sh`.

Signed-off-by: Pratik Karki <predatoramigo@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/rebase.c
index 43b46998da0bc92493e414bdc9db08ab95104cbf..04d830408bc0f7e60eb500ac5abc8ff8551e2029 100644 (file)
@@ -632,6 +632,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
        struct string_list whitespace = STRING_LIST_INIT_NODUP;
        struct string_list exec = STRING_LIST_INIT_NODUP;
        const char *rebase_merges = NULL;
+       int fork_point = -1;
        struct option builtin_rebase_options[] = {
                OPT_STRING(0, "onto", &options.onto_name,
                           N_("revision"),
@@ -715,6 +716,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
                        N_("mode"),
                        N_("try to rebase merges instead of skipping them"),
                        PARSE_OPT_OPTARG, NULL, (intptr_t)""},
+               OPT_BOOL(0, "fork-point", &fork_point,
+                        N_("use 'merge-base --fork-point' to refine upstream")),
                OPT_END(),
        };
 
@@ -1063,6 +1066,14 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
        } else
                BUG("unexpected number of arguments left to parse");
 
+       if (fork_point > 0) {
+               struct commit *head =
+                       lookup_commit_reference(the_repository,
+                                               &options.orig_head);
+               options.restrict_revision =
+                       get_fork_point(options.upstream_name, head);
+       }
+
        if (read_index(the_repository->index) < 0)
                die(_("could not read index"));