]> git.ipfire.org Git - thirdparty/git.git/commitdiff
rebase: generify create_autostash()
authorDenton Liu <liu.denton@gmail.com>
Tue, 7 Apr 2020 14:28:02 +0000 (10:28 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 10 Apr 2020 16:28:02 +0000 (09:28 -0700)
In the future, we plan on lib-ifying create_autostash() so we need it to
be more generic. Make it more generic by making it accept a
`struct repository` argument instead of implicitly using the non-repo
functions and `the_repository`. Also, make it accept a `path` argument
so that we no longer rely have to rely on `struct rebase_options`.
Finally, make it accept a `default_reflog_action` argument so we no
longer have to rely on `DEFAULT_REFLOG_ACTION`.

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

index 581ad3af7b5db2d8850268b950db35fc502f7815..ae345c9e57905a9762a24741d69d288d00b085b5 100644 (file)
@@ -1274,22 +1274,21 @@ static int check_exec_cmd(const char *cmd)
        return 0;
 }
 
-static void create_autostash(struct rebase_options *options)
+static void create_autostash(struct repository *r, const char *path,
+                            const char *default_reflog_action)
 {
        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);
+       fd = repo_hold_locked_index(r, &lock_file, 0);
+       refresh_index(r->index, REFRESH_QUIET, NULL, NULL, NULL);
        if (0 <= fd)
-               repo_update_index_if_able(the_repository, &lock_file);
+               repo_update_index_if_able(r, &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);
+       if (has_unstaged_changes(r, 1) ||
+           has_uncommitted_changes(r, 1)) {
                struct child_process stash = CHILD_PROCESS_INIT;
                struct object_id oid;
 
@@ -1307,18 +1306,18 @@ static void create_autostash(struct rebase_options *options)
                strbuf_reset(&buf);
                strbuf_add_unique_abbrev(&buf, &oid, DEFAULT_ABBREV);
 
-               if (safe_create_leading_directories_const(autostash))
+               if (safe_create_leading_directories_const(path))
                        die(_("Could not create directory for '%s'"),
-                           options->state_dir);
-               write_file(autostash, "%s", oid_to_hex(&oid));
+                           path);
+               write_file(path, "%s", oid_to_hex(&oid));
                printf(_("Created autostash: %s\n"), buf.buf);
-               if (reset_head(the_repository, NULL, "reset --hard",
+               if (reset_head(r, NULL, "reset --hard",
                               NULL, RESET_HEAD_HARD, NULL, NULL,
-                              DEFAULT_REFLOG_ACTION) < 0)
+                              default_reflog_action) < 0)
                        die(_("could not reset --hard"));
 
-               if (discard_index(the_repository->index) < 0 ||
-                       repo_read_index(the_repository) < 0)
+               if (discard_index(r->index) < 0 ||
+                       repo_read_index(r) < 0)
                        die(_("could not read index"));
        }
        strbuf_release(&buf);
@@ -1956,7 +1955,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
                die(_("could not read index"));
 
        if (options.autostash) {
-               create_autostash(&options);
+               create_autostash(the_repository, state_dir_path("autostash", &options),
+                                DEFAULT_REFLOG_ACTION);
        }
 
        if (require_clean_work_tree(the_repository, "rebase",