Hi Denton
On 21/03/2020 09:21, Denton Liu wrote:
Extract common functionality of apply_autostash() into
apply_save_autostash() and use it to implement save_autostash(). This
function will be used in a future commit.
Signed-off-by: Denton Liu <liu.denton@xxxxxxxxx>
---
sequencer.c | 37 +++++++++++++++++++++++++++----------
sequencer.h | 1 +
2 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/sequencer.c b/sequencer.c
index 81b6c700d1..d67d47b332 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -3705,7 +3705,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_sha1 = STRBUF_INIT;
struct child_process child = CHILD_PROCESS_INIT;
@@ -3718,13 +3718,17 @@ int apply_autostash(const char *path)
}
strbuf_trim(&stash_sha1);
- 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_sha1.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_sha1.buf);
+ ret = run_command(&child);
+ }
+
+ if (attempt_apply && !ret)
If attempt_only is not set then we wont get any message - is this
intended? Previously we always showed the message when applying was
successful
fprintf(stderr, _("Applied autostash.\n"));
else {
struct child_process store = CHILD_PROCESS_INIT;
@@ -3740,10 +3744,13 @@ int apply_autostash(const char *path)
ret = error(_("cannot store %s"), stash_sha1.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."));
I'm a bit confused by the new message, perhaps the commit message could
explain what attempt_only is used for and then I suspect the reason for
this change will become clear
Best Wishes
Phillip
}
unlink(path);
@@ -3751,6 +3758,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 44ecfee7f3..1cb0e4e4b7 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)