[PATCH] Handle rebase fork-point options in pull --rebase

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




This is a patch to handle --fork-point and --no-fork-point in pull --rebase.

I had a recent bug report about pull --rebase not working correctly...

but it was working correctly, but not doing what I expected due to always

using "merge-base --fork-point"

This patch implements handling the --fork-point and --no-fork-point options,

and also checks the config rebase.forkpoint value...

and it works to resolve my prior bug report issue.

If there are any questions or comments, let me know!

Thanks to all for the help and comments on my prior bug report!

-Bill


diff --git a/builtin/pull.c b/builtin/pull.c
index a1ebc6a..f2d405f 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -117,6 +117,10 @@ static int opt_show_forced_updates = -1;
 static const char *set_upstream;
 static struct strvec opt_fetch = STRVEC_INIT;

+/* options to include rebase fork-point preference */
+static int config_fork_point = -1;
+static int opt_fork_point = -1;
+
 static struct option pull_options[] = {
    /* Shared options */
    OPT__VERBOSITY(&opt_verbosity),
@@ -253,6 +257,10 @@ static struct option pull_options[] = {
        N_("set upstream for git pull/fetch"),
        PARSE_OPT_NOARG),

+   /* rebase option to use/not use merge-base --fork-point */
+   OPT_BOOL(0, "fork-point", &opt_fork_point,
+       N_("rebase with 'merge-base --fork-point' to refine upstream")),
+
    OPT_END()
 };

@@ -366,6 +374,9 @@ static int git_pull_config(const char *var, const char *value,
    if (!strcmp(var, "rebase.autostash")) {
        config_autostash = git_config_bool(var, value);
        return 0;
+   } else if (!strcmp(var, "rebase.forkpoint")) {
+       config_fork_point = git_config_bool(var, value) ? -1 : 0;
+       return 0;
    } else if (!strcmp(var, "submodule.recurse")) {
        recurse_submodules = git_config_bool(var, value) ?
            RECURSE_SUBMODULES_ON : RECURSE_SUBMODULES_OFF;
@@ -1059,7 +1070,17 @@ int cmd_pull(int argc,
                N_("pull with rebase"),
                _("Please commit or stash them."), 1, 0);

-       if (get_rebase_fork_point(&rebase_fork_point, repo, *refspecs))
+       if (opt_fork_point == -1)
+           opt_fork_point = config_fork_point;
+       if (opt_fork_point < 0)
+           opt_fork_point = 1;
+ fprintf_ln(stderr, _("rebasing %s fork-point"), (opt_fork_point ? "with" : "without"));
+
+       /*
+ * If we're *not* using fork-point, or we don't find one in get_rebase_fork_point(),
+        * clear the rebase_fork_point info.
+        */
+ if (!opt_fork_point || get_rebase_fork_point(&rebase_fork_point, repo, *refspecs))
            oidclr(&rebase_fork_point, the_repository->hash_algo);
    }






[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux