summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sequencer.c37
-rw-r--r--sequencer.h1
2 files changed, 28 insertions, 10 deletions
diff --git a/sequencer.c b/sequencer.c
index 645bc47ce3..084ea4117e 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -3707,7 +3707,7 @@ void create_autostash(struct repository *r, const char *path,
strbuf_release(&buf);
}
-int apply_autostash(const char *path)
+static int apply_save_autostash(const char *path, int attempt_apply)
{
struct strbuf stash_oid = STRBUF_INIT;
struct child_process child = CHILD_PROCESS_INIT;
@@ -3720,13 +3720,17 @@ int apply_autostash(const char *path)
}
strbuf_trim(&stash_oid);
- 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);
- if (!run_command(&child))
+ 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);
+ ret = run_command(&child);
+ }
+
+ if (attempt_apply && !ret)
fprintf(stderr, _("Applied autostash.\n"));
else {
struct child_process store = CHILD_PROCESS_INIT;
@@ -3742,10 +3746,13 @@ int apply_autostash(const char *path)
ret = error(_("cannot store %s"), stash_oid.buf);
else
fprintf(stderr,
- _("Applying autostash resulted in conflicts.\n"
+ _("%s\n"
"Your changes are safe in the stash.\n"
"You can run \"git stash pop\" or"
- " \"git stash drop\" at any time.\n"));
+ " \"git stash drop\" at any time.\n"),
+ attempt_apply ?
+ _("Applying autostash resulted in conflicts.") :
+ _("Autostash exists; creating a new stash entry."));
}
unlink(path);
@@ -3753,6 +3760,16 @@ int apply_autostash(const char *path)
return ret;
}
+int save_autostash(const char *path)
+{
+ return apply_save_autostash(path, 0);
+}
+
+int apply_autostash(const char *path)
+{
+ return apply_save_autostash(path, 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 9d1fe0ccfb..306d4cecfb 100644
--- a/sequencer.h
+++ b/sequencer.h
@@ -193,6 +193,7 @@ void commit_post_rewrite(struct repository *r,
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);
#define SUMMARY_INITIAL_COMMIT (1 << 0)