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>
Jon Seymour committed
Aug 21, 2010 at 14:09 UTC
f276872d89c19c07a4035bc41e4b26523dd3b003
1 file changed
+8
-4
git-stash.sh
+8
-4
@@ -423,6 +423,13 @@ apply_stash () {
423
fi
424
}
425
426
+pop_stash() {
427
+ assert_stash_ref "$@"
428
+
429
+ apply_stash "$@" &&
430
+ drop_stash "$@"
431
+}
432
+
433
drop_stash () {
434
assert_stash_ref "$@"
435
@@ -498,10 +505,7 @@ drop)
505
;;
506
pop)
507
shift
501
- if apply_stash "$@"
502
- then
503
- drop_stash "$applied_stash"
504
- fi
508
+ pop_stash "$@"
509
;;
510
branch)
511
shift