]> git.ipfire.org Git - thirdparty/git.git/commitdiff
rebase: factor out checkout for up to date branch
authorPhillip Wood <phillip.wood@dunelm.org.uk>
Wed, 26 Jan 2022 13:05:36 +0000 (13:05 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 26 Jan 2022 20:08:52 +0000 (12:08 -0800)
This code is heavily indented and it will be convenient later in the
series to have it in its own function.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/rebase.c

index 34b4744e5f3b7ccd5c4a215f477a622cfa06e4a0..f5c37b7d4a50470414a8f134a4ebc35b5bb93cb9 100644 (file)
@@ -812,6 +812,23 @@ static int rebase_config(const char *var, const char *value, void *data)
        return git_default_config(var, value, data);
 }
 
+static int checkout_up_to_date(struct rebase_options *options)
+{
+       struct strbuf buf = STRBUF_INIT;
+       int ret = 0;
+
+       strbuf_addf(&buf, "%s: checkout %s",
+                   getenv(GIT_REFLOG_ACTION_ENVIRONMENT),
+                   options->switch_to);
+       if (reset_head(the_repository, &options->orig_head, "checkout",
+                      options->head_name, RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
+                      NULL, buf.buf, DEFAULT_REFLOG_ACTION) < 0)
+               ret = error(_("could not switch to %s"), options->switch_to);
+       strbuf_release(&buf);
+
+       return ret;
+}
+
 /*
  * Determines whether the commits in from..to are linear, i.e. contain
  * no merge commits. This function *expects* `from` to be an ancestor of
@@ -1673,21 +1690,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
                if (!(options.flags & REBASE_FORCE)) {
                        /* Lazily switch to the target branch if needed... */
                        if (options.switch_to) {
-                               strbuf_reset(&buf);
-                               strbuf_addf(&buf, "%s: checkout %s",
-                                           getenv(GIT_REFLOG_ACTION_ENVIRONMENT),
-                                           options.switch_to);
-                               if (reset_head(the_repository,
-                                              &options.orig_head, "checkout",
-                                              options.head_name,
-                                              RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
-                                              NULL, buf.buf,
-                                              DEFAULT_REFLOG_ACTION) < 0) {
-                                       ret = error(_("could not switch to "
-                                                       "%s"),
-                                                     options.switch_to);
+                               ret = checkout_up_to_date(&options);
+                               if (ret)
                                        goto cleanup;
-                               }
                        }
 
                        if (!(options.flags & REBASE_NO_QUIET))