Jing Xue [off-list ref] writes:
(I tried to send this trivial patch for a couple of times using
git-send-email, but somehow it never turned up.)
Currently when there are no stashes, 'git stash show' basically aborts with an
error message from rev-parse: "fatal: Needed a single revision", which can be
confusing. This patch makes git-stash keep quiet and exit gracefully in that
case.
I agree "git stash show" should not give cryptic error message, but I
think you should do this only when the user did not explicitly say which
stash to show (that is, we should still give error message if the user
said "git stash show garbage").
On Thu, Dec 13, 2007 at 05:34:40PM -0800, Junio C Hamano wrote:
I agree "git stash show" should not give cryptic error message, but I
think you should do this only when the user did not explicitly say which
stash to show (that is, we should still give error message if the user
said "git stash show garbage").
Good point. Actually I found out that if there _are_ some stashes and an
invalid name is given, the current behavior is still printing
refs/stash, which I think is not quite right. So I also try to fix that
while I'm at it.
Now "git stash show" will keep quiet and just exit if there are no
stashes at all. "git stash show some-non-existent-stash" will always
print a clear message indicating the case.
---
git-stash.sh | 23 ++++++++++++++++++++---
1 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/git-stash.sh b/git-stash.sh
index f16fd9c..40e93dd 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -116,13 +116,30 @@ show_stash () {
flags=$(git rev-parse --no-revs --flags "$@")
if test -z "$flags"
then
- flags=--stat
+ diff_flags=--stat
+ else
+ diff_flags=$flags
+ fi
+ s=$(git rev-parse --revs-only --no-flags "$@")
+ if test -z "$s"
+ then
+ arguments=$@
+ if test "${flags}" = "${arguments}"
+ then
+ s=$(git rev-parse --revs-only --no-flags $ref_stash)
+ if test -z "$s"
+ then
+ return 0
+ fi
+ else
+ eval stash_name=\$$#
+ die "Can't find any stash with name $stash_name"
+ fi
fi
- s=$(git rev-parse --revs-only --no-flags --default $ref_stash "$@")
w_commit=$(git rev-parse --verify "$s") &&
b_commit=$(git rev-parse --verify "$s^") &&
- git diff $flags $b_commit $w_commit
+ git diff $diff_flags $b_commit $w_commit
}
apply_stash () {--
1.5.4.rc0.8.gd381b