Browse Source

stash: convert store to builtin

Add stash store to the helper and delete the store_stash function
from the shell script.

Signed-off-by: Paul-Sebastian Ungureanu <ungureanupaulsebastian@gmail.com>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Paul-Sebastian Ungureanu 6 years ago committed by Junio C Hamano
parent
commit
41e0dd55c4
  1. 62
      builtin/stash--helper.c
  2. 43
      git-stash.sh

62
builtin/stash--helper.c

@ -58,6 +58,11 @@ static const char * const git_stash_helper_clear_usage[] = { @@ -58,6 +58,11 @@ static const char * const git_stash_helper_clear_usage[] = {
NULL
};

static const char * const git_stash_helper_store_usage[] = {
N_("git stash--helper store [-m|--message <message>] [-q|--quiet] <commit>"),
NULL
};

static const char *ref_stash = "refs/stash";
static struct strbuf stash_index_path = STRBUF_INIT;

@ -729,6 +734,61 @@ static int show_stash(int argc, const char **argv, const char *prefix) @@ -729,6 +734,61 @@ static int show_stash(int argc, const char **argv, const char *prefix)
return diff_result_code(&rev.diffopt, 0);
}

static int do_store_stash(const struct object_id *w_commit, const char *stash_msg,
int quiet)
{
if (!stash_msg)
stash_msg = "Created via \"git stash store\".";

if (update_ref(stash_msg, ref_stash, w_commit, NULL,
REF_FORCE_CREATE_REFLOG,
quiet ? UPDATE_REFS_QUIET_ON_ERR :
UPDATE_REFS_MSG_ON_ERR)) {
if (!quiet) {
fprintf_ln(stderr, _("Cannot update %s with %s"),
ref_stash, oid_to_hex(w_commit));
}
return -1;
}

return 0;
}

static int store_stash(int argc, const char **argv, const char *prefix)
{
int quiet = 0;
const char *stash_msg = NULL;
struct object_id obj;
struct object_context dummy;
struct option options[] = {
OPT__QUIET(&quiet, N_("be quiet")),
OPT_STRING('m', "message", &stash_msg, "message",
N_("stash message")),
OPT_END()
};

argc = parse_options(argc, argv, prefix, options,
git_stash_helper_store_usage,
PARSE_OPT_KEEP_UNKNOWN);

if (argc != 1) {
if (!quiet)
fprintf_ln(stderr, _("\"git stash store\" requires one "
"<commit> argument"));
return -1;
}

if (get_oid_with_context(argv[0], quiet ? GET_OID_QUIETLY : 0, &obj,
&dummy)) {
if (!quiet)
fprintf_ln(stderr, _("Cannot update %s with %s"),
ref_stash, argv[0]);
return -1;
}

return do_store_stash(&obj, stash_msg, quiet);
}

int cmd_stash__helper(int argc, const char **argv, const char *prefix)
{
pid_t pid = getpid();
@ -763,6 +823,8 @@ int cmd_stash__helper(int argc, const char **argv, const char *prefix) @@ -763,6 +823,8 @@ int cmd_stash__helper(int argc, const char **argv, const char *prefix)
return !!list_stash(argc, argv, prefix);
else if (!strcmp(argv[0], "show"))
return !!show_stash(argc, argv, prefix);
else if (!strcmp(argv[0], "store"))
return !!store_stash(argc, argv, prefix);

usage_msg_opt(xstrfmt(_("unknown subcommand: %s"), argv[0]),
git_stash_helper_usage, options);

43
git-stash.sh

@ -208,45 +208,6 @@ create_stash () { @@ -208,45 +208,6 @@ create_stash () {
die "$(gettext "Cannot record working tree state")"
}

store_stash () {
while test $# != 0
do
case "$1" in
-m|--message)
shift
stash_msg="$1"
;;
-m*)
stash_msg=${1#-m}
;;
--message=*)
stash_msg=${1#--message=}
;;
-q|--quiet)
quiet=t
;;
*)
break
;;
esac
shift
done
test $# = 1 ||
die "$(eval_gettext "\"$dashless store\" requires one <commit> argument")"

w_commit="$1"
if test -z "$stash_msg"
then
stash_msg="Created via \"git stash store\"."
fi

git update-ref --create-reflog -m "$stash_msg" $ref_stash $w_commit
ret=$?
test $ret != 0 && test -z "$quiet" &&
die "$(eval_gettext "Cannot update \$ref_stash with \$w_commit")"
return $ret
}

push_stash () {
keep_index=
patch_mode=
@ -325,7 +286,7 @@ push_stash () { @@ -325,7 +286,7 @@ push_stash () {
clear_stash || die "$(gettext "Cannot initialize stash")"

create_stash -m "$stash_msg" -u "$untracked" -- "$@"
store_stash -m "$stash_msg" -q $w_commit ||
git stash--helper store -m "$stash_msg" -q $w_commit ||
die "$(gettext "Cannot save the current status")"
say "$(eval_gettext "Saved working directory and index state \$stash_msg")"

@ -485,7 +446,7 @@ create) @@ -485,7 +446,7 @@ create)
;;
store)
shift
store_stash "$@"
git stash--helper store "$@"
;;
drop)
shift

Loading…
Cancel
Save