stash: convert pop to builtin
Add stash pop to the helper and delete the pop_stash, drop_stash, assert_stash_ref functions from the shell script now that they are no longer needed. Signed-off-by: Joel Teichroeb <joel@teichroeb.net> 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>
This commit is contained in:
parent
577c1995e8
commit
c4de61d7a9
@ -13,7 +13,7 @@
|
||||
|
||||
static const char * const git_stash_helper_usage[] = {
|
||||
N_("git stash--helper drop [-q|--quiet] [<stash>]"),
|
||||
N_("git stash--helper apply [--index] [-q|--quiet] [<stash>]"),
|
||||
N_("git stash--helper ( pop | apply ) [--index] [-q|--quiet] [<stash>]"),
|
||||
N_("git stash--helper branch <branchname> [<stash>]"),
|
||||
N_("git stash--helper clear"),
|
||||
NULL
|
||||
@ -24,6 +24,11 @@ static const char * const git_stash_helper_drop_usage[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static const char * const git_stash_helper_pop_usage[] = {
|
||||
N_("git stash--helper pop [--index] [-q|--quiet] [<stash>]"),
|
||||
NULL
|
||||
};
|
||||
|
||||
static const char * const git_stash_helper_apply_usage[] = {
|
||||
N_("git stash--helper apply [--index] [-q|--quiet] [<stash>]"),
|
||||
NULL
|
||||
@ -542,6 +547,36 @@ static int drop_stash(int argc, const char **argv, const char *prefix)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int pop_stash(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int ret;
|
||||
int index = 0;
|
||||
int quiet = 0;
|
||||
struct stash_info info;
|
||||
struct option options[] = {
|
||||
OPT__QUIET(&quiet, N_("be quiet, only report errors")),
|
||||
OPT_BOOL(0, "index", &index,
|
||||
N_("attempt to recreate the index")),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
argc = parse_options(argc, argv, prefix, options,
|
||||
git_stash_helper_pop_usage, 0);
|
||||
|
||||
if (get_stash_info(&info, argc, argv))
|
||||
return -1;
|
||||
|
||||
assert_stash_ref(&info);
|
||||
if ((ret = do_apply_stash(prefix, &info, index, quiet)))
|
||||
printf_ln(_("The stash entry is kept in case "
|
||||
"you need it again."));
|
||||
else
|
||||
ret = do_drop_stash(prefix, &info, quiet);
|
||||
|
||||
free_stash_info(&info);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int branch_stash(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int ret;
|
||||
@ -606,6 +641,8 @@ int cmd_stash__helper(int argc, const char **argv, const char *prefix)
|
||||
return !!clear_stash(argc, argv, prefix);
|
||||
else if (!strcmp(argv[0], "drop"))
|
||||
return !!drop_stash(argc, argv, prefix);
|
||||
else if (!strcmp(argv[0], "pop"))
|
||||
return !!pop_stash(argc, argv, prefix);
|
||||
else if (!strcmp(argv[0], "branch"))
|
||||
return !!branch_stash(argc, argv, prefix);
|
||||
|
||||
|
47
git-stash.sh
47
git-stash.sh
@ -571,50 +571,6 @@ assert_stash_like() {
|
||||
}
|
||||
}
|
||||
|
||||
is_stash_ref() {
|
||||
is_stash_like "$@" && test -n "$IS_STASH_REF"
|
||||
}
|
||||
|
||||
assert_stash_ref() {
|
||||
is_stash_ref "$@" || {
|
||||
args="$*"
|
||||
die "$(eval_gettext "'\$args' is not a stash reference")"
|
||||
}
|
||||
}
|
||||
|
||||
apply_stash () {
|
||||
cd "$START_DIR"
|
||||
git stash--helper apply "$@"
|
||||
res=$?
|
||||
cd_to_toplevel
|
||||
return $res
|
||||
}
|
||||
|
||||
pop_stash() {
|
||||
assert_stash_ref "$@"
|
||||
|
||||
if apply_stash "$@"
|
||||
then
|
||||
drop_stash "$@"
|
||||
else
|
||||
status=$?
|
||||
say "$(gettext "The stash entry is kept in case you need it again.")"
|
||||
exit $status
|
||||
fi
|
||||
}
|
||||
|
||||
drop_stash () {
|
||||
assert_stash_ref "$@"
|
||||
|
||||
git reflog delete --updateref --rewrite "${REV}" &&
|
||||
say "$(eval_gettext "Dropped \${REV} (\$s)")" ||
|
||||
die "$(eval_gettext "\${REV}: Could not drop stash entry")"
|
||||
|
||||
# clear_stash if we just dropped the last stash entry
|
||||
git rev-parse --verify --quiet "$ref_stash@{0}" >/dev/null ||
|
||||
clear_stash
|
||||
}
|
||||
|
||||
test "$1" = "-p" && set "push" "$@"
|
||||
|
||||
PARSE_CACHE='--not-parsed'
|
||||
@ -672,7 +628,8 @@ drop)
|
||||
;;
|
||||
pop)
|
||||
shift
|
||||
pop_stash "$@"
|
||||
cd "$START_DIR"
|
||||
git stash--helper pop "$@"
|
||||
;;
|
||||
branch)
|
||||
shift
|
||||
|
Loading…
Reference in New Issue
Block a user