]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sequencer: implement apply_autostash_oid()
authorDenton Liu <liu.denton@gmail.com>
Tue, 7 Apr 2020 14:28:06 +0000 (10:28 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 10 Apr 2020 16:28:02 +0000 (09:28 -0700)
Split apply_save_autostash() into apply_autostash_oid() and
apply_save_autostash() where the former operates on an OID string and
the latter reads the OID from a file before passing it into
apply_save_autostash_oid().

This function is required for a future commmit which will rely on being
able to apply an autostash whose OID is stored as a string.

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

index 084ea4117e74ab850e066c091cf08a028818e049..f1eba4cb1fb783b4a7e71484896c593ce9d3ca5a 100644 (file)
@@ -3707,26 +3707,18 @@ void create_autostash(struct repository *r, const char *path,
        strbuf_release(&buf);
 }
 
-static int apply_save_autostash(const char *path, int attempt_apply)
+static int apply_save_autostash_oid(const char *stash_oid, int attempt_apply)
 {
-       struct strbuf stash_oid = STRBUF_INIT;
        struct child_process child = CHILD_PROCESS_INIT;
        int ret = 0;
 
-       if (!read_oneliner(&stash_oid, path,
-                          READ_ONELINER_SKIP_IF_EMPTY)) {
-               strbuf_release(&stash_oid);
-               return 0;
-       }
-       strbuf_trim(&stash_oid);
-
        if (attempt_apply) {
                child.git_cmd = 1;
                child.no_stdout = 1;
                child.no_stderr = 1;
                argv_array_push(&child.args, "stash");
                argv_array_push(&child.args, "apply");
-               argv_array_push(&child.args, stash_oid.buf);
+               argv_array_push(&child.args, stash_oid);
                ret = run_command(&child);
        }
 
@@ -3741,9 +3733,9 @@ static int apply_save_autostash(const char *path, int attempt_apply)
                argv_array_push(&store.args, "-m");
                argv_array_push(&store.args, "autostash");
                argv_array_push(&store.args, "-q");
-               argv_array_push(&store.args, stash_oid.buf);
+               argv_array_push(&store.args, stash_oid);
                if (run_command(&store))
-                       ret = error(_("cannot store %s"), stash_oid.buf);
+                       ret = error(_("cannot store %s"), stash_oid);
                else
                        fprintf(stderr,
                                _("%s\n"
@@ -3755,6 +3747,23 @@ static int apply_save_autostash(const char *path, int attempt_apply)
                                _("Autostash exists; creating a new stash entry."));
        }
 
+       return ret;
+}
+
+static int apply_save_autostash(const char *path, int attempt_apply)
+{
+       struct strbuf stash_oid = STRBUF_INIT;
+       int ret = 0;
+
+       if (!read_oneliner(&stash_oid, path,
+                          READ_ONELINER_SKIP_IF_EMPTY)) {
+               strbuf_release(&stash_oid);
+               return 0;
+       }
+       strbuf_trim(&stash_oid);
+
+       ret = apply_save_autostash_oid(stash_oid.buf, attempt_apply);
+
        unlink(path);
        strbuf_release(&stash_oid);
        return ret;
@@ -3770,6 +3779,11 @@ int apply_autostash(const char *path)
        return apply_save_autostash(path, 1);
 }
 
+int apply_autostash_oid(const char *stash_oid)
+{
+       return apply_save_autostash_oid(stash_oid, 1);
+}
+
 static const char *reflog_message(struct replay_opts *opts,
        const char *sub_action, const char *fmt, ...)
 {
index 306d4cecfb2c17cce56dde1fb0349a6db3d259d0..5a85eeef92d5dd5b9c19fe7cd21d304abd67c132 100644 (file)
@@ -195,6 +195,7 @@ void create_autostash(struct repository *r, const char *path,
                      const char *default_reflog_action);
 int save_autostash(const char *path);
 int apply_autostash(const char *path);
+int apply_autostash_oid(const char *stash_oid);
 
 #define SUMMARY_INITIAL_COMMIT   (1 << 0)
 #define SUMMARY_SHOW_AUTHOR_DATE (1 << 1)