summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sequencer.c38
-rw-r--r--sequencer.h1
2 files changed, 27 insertions, 12 deletions
diff --git a/sequencer.c b/sequencer.c
index 084ea4117e..f1eba4cb1f 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -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, ...)
{
diff --git a/sequencer.h b/sequencer.h
index 306d4cecfb..5a85eeef92 100644
--- a/sequencer.h
+++ b/sequencer.h
@@ -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)