detached-stash: simplify stash_drop
authorJon Seymour <jon.seymour@gmail.com>
Sat, 21 Aug 2010 04:08:59 +0000 (14:08 +1000)
committerJunio C Hamano <gitster@pobox.com>
Sun, 22 Aug 2010 06:51:21 +0000 (23:51 -0700)
Previously, git stash drop would fail noisily while executing git reflog
delete if the specified revision was not a stash reference.

Now, git stash drop fails with an error message which more precisely
indicates the reason for failure.

Furthermore, git stash drop will now fail with a non-zero status code
if stash@{n} specifies a stash log entry that does not actually exist.

This change in behaviour is achieved by delegating argument parsing
to the common parse_flags_and_rev() function (via a call to
assert_stash_ref).

Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-stash.sh

index ba68f1e4a39ff9224ff1285fe5065879683477be..750f360da9730423fde863de391ecbe550b172cf 100755 (executable)
@@ -424,35 +424,10 @@ apply_stash () {
 }
 
 drop_stash () {
-       have_stash || die 'No stash entries to drop'
+       assert_stash_ref "$@"
 
-       while test $# != 0
-       do
-               case "$1" in
-               -q|--quiet)
-                       GIT_QUIET=t
-                       ;;
-               *)
-                       break
-                       ;;
-               esac
-               shift
-       done
-
-       if test $# = 0
-       then
-               set x "$ref_stash@{0}"
-               shift
-       fi
-       # Verify supplied argument looks like a stash entry
-       s=$(git rev-parse --verify "$@") &&
-       git rev-parse --verify "$s:"   > /dev/null 2>&1 &&
-       git rev-parse --verify "$s^1:" > /dev/null 2>&1 &&
-       git rev-parse --verify "$s^2:" > /dev/null 2>&1 ||
-               die "$*: not a valid stashed state"
-
-       git reflog delete --updateref --rewrite "$@" &&
-               say "Dropped $* ($s)" || die "$*: Could not drop stash entry"
+       git reflog delete --updateref --rewrite "${REV}" &&
+               say "Dropped ${REV} ($s)" || die "${REV}: Could not drop 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