]> git.ipfire.org Git - thirdparty/git.git/commitdiff
rebase: extract create_autostash()
authorDenton Liu <liu.denton@gmail.com>
Tue, 7 Apr 2020 14:28:01 +0000 (10:28 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 10 Apr 2020 16:28:02 +0000 (09:28 -0700)
In a future commit, we will lib-ify this code. In preparation for
this, extract the code into the create_autostash() function so that it
can be cleaned up before it is finally lib-ified.

This patch is best viewed with `--color-moved` and
`--color-moved-ws=allow-indentation-change`.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/rebase.c

index 48ef36bd109a00e54f4512d028cc7caccdb271a7..581ad3af7b5db2d8850268b950db35fc502f7815 100644 (file)
@@ -1274,6 +1274,55 @@ static int check_exec_cmd(const char *cmd)
        return 0;
 }
 
+static void create_autostash(struct rebase_options *options)
+{
+       struct strbuf buf = STRBUF_INIT;
+       struct lock_file lock_file = LOCK_INIT;
+       int fd;
+
+       fd = hold_locked_index(&lock_file, 0);
+       refresh_cache(REFRESH_QUIET);
+       if (0 <= fd)
+               repo_update_index_if_able(the_repository, &lock_file);
+       rollback_lock_file(&lock_file);
+
+       if (has_unstaged_changes(the_repository, 1) ||
+           has_uncommitted_changes(the_repository, 1)) {
+               const char *autostash =
+                       state_dir_path("autostash", options);
+               struct child_process stash = CHILD_PROCESS_INIT;
+               struct object_id oid;
+
+               argv_array_pushl(&stash.args,
+                                "stash", "create", "autostash", NULL);
+               stash.git_cmd = 1;
+               stash.no_stdin = 1;
+               strbuf_reset(&buf);
+               if (capture_command(&stash, &buf, GIT_MAX_HEXSZ))
+                       die(_("Cannot autostash"));
+               strbuf_trim_trailing_newline(&buf);
+               if (get_oid(buf.buf, &oid))
+                       die(_("Unexpected stash response: '%s'"),
+                           buf.buf);
+               strbuf_reset(&buf);
+               strbuf_add_unique_abbrev(&buf, &oid, DEFAULT_ABBREV);
+
+               if (safe_create_leading_directories_const(autostash))
+                       die(_("Could not create directory for '%s'"),
+                           options->state_dir);
+               write_file(autostash, "%s", oid_to_hex(&oid));
+               printf(_("Created autostash: %s\n"), buf.buf);
+               if (reset_head(the_repository, NULL, "reset --hard",
+                              NULL, RESET_HEAD_HARD, NULL, NULL,
+                              DEFAULT_REFLOG_ACTION) < 0)
+                       die(_("could not reset --hard"));
+
+               if (discard_index(the_repository->index) < 0 ||
+                       repo_read_index(the_repository) < 0)
+                       die(_("could not read index"));
+       }
+       strbuf_release(&buf);
+}
 
 int cmd_rebase(int argc, const char **argv, const char *prefix)
 {
@@ -1907,50 +1956,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
                die(_("could not read index"));
 
        if (options.autostash) {
-               struct lock_file lock_file = LOCK_INIT;
-               int fd;
-
-               fd = hold_locked_index(&lock_file, 0);
-               refresh_cache(REFRESH_QUIET);
-               if (0 <= fd)
-                       repo_update_index_if_able(the_repository, &lock_file);
-               rollback_lock_file(&lock_file);
-
-               if (has_unstaged_changes(the_repository, 1) ||
-                   has_uncommitted_changes(the_repository, 1)) {
-                       const char *autostash =
-                               state_dir_path("autostash", &options);
-                       struct child_process stash = CHILD_PROCESS_INIT;
-                       struct object_id oid;
-
-                       argv_array_pushl(&stash.args,
-                                        "stash", "create", "autostash", NULL);
-                       stash.git_cmd = 1;
-                       stash.no_stdin = 1;
-                       strbuf_reset(&buf);
-                       if (capture_command(&stash, &buf, GIT_MAX_HEXSZ))
-                               die(_("Cannot autostash"));
-                       strbuf_trim_trailing_newline(&buf);
-                       if (get_oid(buf.buf, &oid))
-                               die(_("Unexpected stash response: '%s'"),
-                                   buf.buf);
-                       strbuf_reset(&buf);
-                       strbuf_add_unique_abbrev(&buf, &oid, DEFAULT_ABBREV);
-
-                       if (safe_create_leading_directories_const(autostash))
-                               die(_("Could not create directory for '%s'"),
-                                   options.state_dir);
-                       write_file(autostash, "%s", oid_to_hex(&oid));
-                       printf(_("Created autostash: %s\n"), buf.buf);
-                       if (reset_head(the_repository, NULL, "reset --hard",
-                                      NULL, RESET_HEAD_HARD, NULL, NULL,
-                                      DEFAULT_REFLOG_ACTION) < 0)
-                               die(_("could not reset --hard"));
-
-                       if (discard_index(the_repository->index) < 0 ||
-                               repo_read_index(the_repository) < 0)
-                               die(_("could not read index"));
-               }
+               create_autostash(&options);
        }
 
        if (require_clean_work_tree(the_repository, "rebase",