Teach stash pop, apply, save, and drop to be quiet when told. By using
the quiet option (-q), these actions will be silent unless errors are
encountered.

Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stephen Boyd 2009-06-17 18:07:37 -07:00 коммит произвёл Junio C Hamano
Родитель 0e987a12fc
Коммит fcdd0e92d9
3 изменённых файлов: 92 добавлений и 24 удалений

Просмотреть файл

@ -9,10 +9,11 @@ SYNOPSIS
-------- --------
[verse] [verse]
'git stash' list [<options>] 'git stash' list [<options>]
'git stash' ( show | drop ) [<stash>] 'git stash' show [<stash>]
'git stash' ( pop | apply ) [--index] [<stash>] 'git stash' drop [-q|--quiet] [<stash>]
'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>]
'git stash' branch <branchname> [<stash>] 'git stash' branch <branchname> [<stash>]
'git stash' [save [--keep-index] [<message>]] 'git stash' [save [--keep-index] [-q|--quiet] [<message>]]
'git stash' clear 'git stash' clear
'git stash' create 'git stash' create
@ -41,7 +42,7 @@ is also possible).
OPTIONS OPTIONS
------- -------
save [--keep-index] [<message>]:: save [--keep-index] [-q|--quiet] [<message>]::
Save your local modifications to a new 'stash', and run `git reset Save your local modifications to a new 'stash', and run `git reset
--hard` to revert them. This is the default action when no --hard` to revert them. This is the default action when no
@ -75,7 +76,7 @@ show [<stash>]::
it will accept any format known to 'git-diff' (e.g., `git stash show it will accept any format known to 'git-diff' (e.g., `git stash show
-p stash@\{1}` to view the second most recent stash in patch form). -p stash@\{1}` to view the second most recent stash in patch form).
pop [<stash>]:: pop [--index] [-q|--quiet] [<stash>]::
Remove a single stashed state from the stash list and apply it Remove a single stashed state from the stash list and apply it
on top of the current working tree state, i.e., do the inverse on top of the current working tree state, i.e., do the inverse
@ -93,7 +94,7 @@ longer apply the changes as they were originally).
+ +
When no `<stash>` is given, `stash@\{0}` is assumed. When no `<stash>` is given, `stash@\{0}` is assumed.
apply [--index] [<stash>]:: apply [--index] [-q|--quiet] [<stash>]::
Like `pop`, but do not remove the state from the stash list. Like `pop`, but do not remove the state from the stash list.
@ -115,7 +116,7 @@ clear::
Remove all the stashed states. Note that those states will then Remove all the stashed states. Note that those states will then
be subject to pruning, and may be difficult or impossible to recover. be subject to pruning, and may be difficult or impossible to recover.
drop [<stash>]:: drop [-q|--quiet] [<stash>]::
Remove a single stashed state from the stash list. When no `<stash>` Remove a single stashed state from the stash list. When no `<stash>`
is given, it removes the latest one. i.e. `stash@\{0}` is given, it removes the latest one. i.e. `stash@\{0}`

Просмотреть файл

@ -3,10 +3,11 @@
dashless=$(basename "$0" | sed -e 's/-/ /') dashless=$(basename "$0" | sed -e 's/-/ /')
USAGE="list [<options>] USAGE="list [<options>]
or: $dashless ( show | drop ) [<stash>] or: $dashless show [<stash>]
or: $dashless ( pop | apply ) [--index] [<stash>] or: $dashless drop [-q|--quiet] [<stash>]
or: $dashless ( pop | apply ) [--index] [-q|--quiet] [<stash>]
or: $dashless branch <branchname> [<stash>] or: $dashless branch <branchname> [<stash>]
or: $dashless [save [--keep-index] [<message>]] or: $dashless [save [--keep-index] [-q|--quiet] [<message>]]
or: $dashless clear" or: $dashless clear"
SUBDIRECTORY_OK=Yes SUBDIRECTORY_OK=Yes
@ -94,18 +95,28 @@ create_stash () {
save_stash () { save_stash () {
keep_index= keep_index=
while test $# != 0
do
case "$1" in case "$1" in
--keep-index) --keep-index)
keep_index=t keep_index=t
shift ;;
-q|--quiet)
GIT_QUIET=t
;;
*)
break
;;
esac esac
shift
done
stash_msg="$*" stash_msg="$*"
git update-index -q --refresh git update-index -q --refresh
if no_changes if no_changes
then then
echo 'No local changes to save' say 'No local changes to save'
exit 0 exit 0
fi fi
test -f "$GIT_DIR/logs/$ref_stash" || test -f "$GIT_DIR/logs/$ref_stash" ||
@ -118,9 +129,9 @@ save_stash () {
git update-ref -m "$stash_msg" $ref_stash $w_commit || git update-ref -m "$stash_msg" $ref_stash $w_commit ||
die "Cannot save the current status" die "Cannot save the current status"
printf 'Saved working directory and index state "%s"\n' "$stash_msg" say Saved working directory and index state "$stash_msg"
git reset --hard git reset --hard ${GIT_QUIET:+-q}
if test -n "$keep_index" && test -n $i_tree if test -n "$keep_index" && test -n $i_tree
then then
@ -156,11 +167,22 @@ apply_stash () {
die 'Cannot apply to a dirty working tree, please stage your changes' die 'Cannot apply to a dirty working tree, please stage your changes'
unstash_index= unstash_index=
while test $# != 0
do
case "$1" in case "$1" in
--index) --index)
unstash_index=t unstash_index=t
shift ;;
-q|--quiet)
GIT_QUIET=t
;;
*)
break
;;
esac esac
shift
done
# current index state # current index state
c_tree=$(git write-tree) || c_tree=$(git write-tree) ||
@ -193,6 +215,10 @@ apply_stash () {
export GITHEAD_$w_tree GITHEAD_$c_tree GITHEAD_$b_tree export GITHEAD_$w_tree GITHEAD_$c_tree GITHEAD_$b_tree
" "
if test -n "$GIT_QUIET"
then
export GIT_MERGE_VERBOSITY=0
fi
if git-merge-recursive $b_tree -- $c_tree $w_tree if git-merge-recursive $b_tree -- $c_tree $w_tree
then then
# No conflict # No conflict
@ -207,7 +233,12 @@ apply_stash () {
die "Cannot unstage modified files" die "Cannot unstage modified files"
rm -f "$a" rm -f "$a"
fi fi
git status || : squelch=
if test -n "$GIT_QUIET"
then
squelch='>/dev/null 2>&1'
fi
eval "git status $squelch" || :
else else
# Merge conflict; keep the exit status from merge-recursive # Merge conflict; keep the exit status from merge-recursive
status=$? status=$?
@ -222,6 +253,19 @@ apply_stash () {
drop_stash () { drop_stash () {
have_stash || die 'No stash entries to drop' have_stash || die 'No stash entries to drop'
while test $# != 0
do
case "$1" in
-q|--quiet)
GIT_QUIET=t
;;
*)
break
;;
esac
shift
done
if test $# = 0 if test $# = 0
then then
set x "$ref_stash@{0}" set x "$ref_stash@{0}"
@ -235,7 +279,7 @@ drop_stash () {
die "$*: not a valid stashed state" die "$*: not a valid stashed state"
git reflog delete --updateref --rewrite "$@" && git reflog delete --updateref --rewrite "$@" &&
echo "Dropped $* ($s)" || die "$*: Could not drop stash entry" say "Dropped $* ($s)" || die "$*: Could not drop stash entry"
# clear_stash if we just dropped the last stash entry # clear_stash if we just dropped the last stash entry
git rev-parse --verify "$ref_stash@{0}" > /dev/null 2>&1 || clear_stash git rev-parse --verify "$ref_stash@{0}" > /dev/null 2>&1 || clear_stash
@ -312,7 +356,7 @@ branch)
if test $# -eq 0 if test $# -eq 0
then then
save_stash && save_stash &&
echo '(To restore them type "git stash apply")' say '(To restore them type "git stash apply")'
else else
usage usage
fi fi

Просмотреть файл

@ -177,4 +177,27 @@ test_expect_success 'stash branch' '
test 0 = $(git stash list | wc -l) test 0 = $(git stash list | wc -l)
' '
test_expect_success 'apply -q is quiet' '
echo foo > file &&
git stash &&
git stash apply -q > output.out 2>&1 &&
test ! -s output.out
'
test_expect_success 'save -q is quiet' '
git stash save --quiet > output.out 2>&1 &&
test ! -s output.out
'
test_expect_success 'pop -q is quiet' '
git stash pop -q > output.out 2>&1 &&
test ! -s output.out
'
test_expect_success 'drop -q is quiet' '
git stash &&
git stash drop -q > output.out 2>&1 &&
test ! -s output.out
'
test_done test_done