summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Seymour <jon.seymour@gmail.com>2010-08-21 04:09:00 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-08-22 06:51:21 (GMT)
commitf276872d89c19c07a4035bc41e4b26523dd3b003 (patch)
tree46b3f639854b294b0b539eba4e902049404f9b57
parent92e39e44542b34923294fbb45069b8140d19976d (diff)
downloadgit-f276872d89c19c07a4035bc41e4b26523dd3b003.zip
git-f276872d89c19c07a4035bc41e4b26523dd3b003.tar.gz
git-f276872d89c19c07a4035bc41e4b26523dd3b003.tar.bz2
detached-stash: refactor git stash pop implementation
git stash pop is abstracted into its own implementation function - pop_stash. The behaviour is changed so that git stash pop fails early if the the specified stash reference does not exist or does not refer to an extant entry in the reflog of the reference stash. This fixes the case where the apply succeeds, but the drop fails. Previously this caused caused git stash pop to exit with a non-zero exit code and a dirty tree. Now, git stash pop fails with a non-zero exit code, but the working tree is not modified. Signed-off-by: Jon Seymour <jon.seymour@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xgit-stash.sh12
1 files changed, 8 insertions, 4 deletions
diff --git a/git-stash.sh b/git-stash.sh
index 750f360..ac4c0f6 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -423,6 +423,13 @@ apply_stash () {
fi
}
+pop_stash() {
+ assert_stash_ref "$@"
+
+ apply_stash "$@" &&
+ drop_stash "$@"
+}
+
drop_stash () {
assert_stash_ref "$@"
@@ -498,10 +505,7 @@ drop)
;;
pop)
shift
- if apply_stash "$@"
- then
- drop_stash "$applied_stash"
- fi
+ pop_stash "$@"
;;
branch)
shift