Browse Source

sequencer: implement apply_autostash_oid()

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>
maint
Denton Liu 5 years ago committed by Junio C Hamano
parent
commit
804fe31557
  1. 38
      sequencer.c
  2. 1
      sequencer.h

38
sequencer.c

@ -3707,26 +3707,18 @@ void create_autostash(struct repository *r, const char *path,
strbuf_release(&buf); 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; struct child_process child = CHILD_PROCESS_INIT;
int ret = 0; 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) { if (attempt_apply) {
child.git_cmd = 1; child.git_cmd = 1;
child.no_stdout = 1; child.no_stdout = 1;
child.no_stderr = 1; child.no_stderr = 1;
argv_array_push(&child.args, "stash"); argv_array_push(&child.args, "stash");
argv_array_push(&child.args, "apply"); 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); 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, "-m");
argv_array_push(&store.args, "autostash"); argv_array_push(&store.args, "autostash");
argv_array_push(&store.args, "-q"); 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)) if (run_command(&store))
ret = error(_("cannot store %s"), stash_oid.buf); ret = error(_("cannot store %s"), stash_oid);
else else
fprintf(stderr, fprintf(stderr,
_("%s\n" _("%s\n"
@ -3755,6 +3747,23 @@ static int apply_save_autostash(const char *path, int attempt_apply)
_("Autostash exists; creating a new stash entry.")); _("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); unlink(path);
strbuf_release(&stash_oid); strbuf_release(&stash_oid);
return ret; return ret;
@ -3770,6 +3779,11 @@ int apply_autostash(const char *path)
return apply_save_autostash(path, 1); 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, static const char *reflog_message(struct replay_opts *opts,
const char *sub_action, const char *fmt, ...) const char *sub_action, const char *fmt, ...)
{ {

1
sequencer.h

@ -195,6 +195,7 @@ void create_autostash(struct repository *r, const char *path,
const char *default_reflog_action); const char *default_reflog_action);
int save_autostash(const char *path); int save_autostash(const char *path);
int apply_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_INITIAL_COMMIT (1 << 0)
#define SUMMARY_SHOW_AUTHOR_DATE (1 << 1) #define SUMMARY_SHOW_AUTHOR_DATE (1 << 1)

Loading…
Cancel
Save