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
parent
dc7bd382b1
commit
41e0dd55c4
|
@ -58,6 +58,11 @@ static const char * const git_stash_helper_clear_usage[] = {
|
||||||
NULL
|
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 const char *ref_stash = "refs/stash";
|
||||||
static struct strbuf stash_index_path = STRBUF_INIT;
|
static struct strbuf stash_index_path = STRBUF_INIT;
|
||||||
|
|
||||||
|
@ -729,6 +734,61 @@ static int show_stash(int argc, const char **argv, const char *prefix)
|
||||||
return diff_result_code(&rev.diffopt, 0);
|
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)
|
int cmd_stash__helper(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
pid_t pid = getpid();
|
pid_t pid = getpid();
|
||||||
|
@ -763,6 +823,8 @@ int cmd_stash__helper(int argc, const char **argv, const char *prefix)
|
||||||
return !!list_stash(argc, argv, prefix);
|
return !!list_stash(argc, argv, prefix);
|
||||||
else if (!strcmp(argv[0], "show"))
|
else if (!strcmp(argv[0], "show"))
|
||||||
return !!show_stash(argc, argv, prefix);
|
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]),
|
usage_msg_opt(xstrfmt(_("unknown subcommand: %s"), argv[0]),
|
||||||
git_stash_helper_usage, options);
|
git_stash_helper_usage, options);
|
||||||
|
|
43
git-stash.sh
43
git-stash.sh
|
@ -208,45 +208,6 @@ create_stash () {
|
||||||
die "$(gettext "Cannot record working tree state")"
|
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 () {
|
push_stash () {
|
||||||
keep_index=
|
keep_index=
|
||||||
patch_mode=
|
patch_mode=
|
||||||
|
@ -325,7 +286,7 @@ push_stash () {
|
||||||
clear_stash || die "$(gettext "Cannot initialize stash")"
|
clear_stash || die "$(gettext "Cannot initialize stash")"
|
||||||
|
|
||||||
create_stash -m "$stash_msg" -u "$untracked" -- "$@"
|
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")"
|
die "$(gettext "Cannot save the current status")"
|
||||||
say "$(eval_gettext "Saved working directory and index state \$stash_msg")"
|
say "$(eval_gettext "Saved working directory and index state \$stash_msg")"
|
||||||
|
|
||||||
|
@ -485,7 +446,7 @@ create)
|
||||||
;;
|
;;
|
||||||
store)
|
store)
|
||||||
shift
|
shift
|
||||||
store_stash "$@"
|
git stash--helper store "$@"
|
||||||
;;
|
;;
|
||||||
drop)
|
drop)
|
||||||
shift
|
shift
|
||||||
|
|
Loading…
Reference in New Issue