Add a few more tests for git-commit
[gitweb.git] / git-stash.sh
index 5bbda47b7b6e286e7e8e5d002d7ed461a831b579..534eb168abf8b0b8ae5c2195bf85b66d9cb6b21e 100755 (executable)
@@ -4,6 +4,7 @@
 USAGE='[ | list | show | apply | clear]'
 
 SUBDIRECTORY_OK=Yes
+OPTIONS_SPEC=
 . git-sh-setup
 require_work_tree
 cd_to_toplevel
@@ -21,23 +22,17 @@ no_changes () {
 clear_stash () {
        if current=$(git rev-parse --verify $ref_stash 2>/dev/null)
        then
-               git update-ref -d refs/stash $current
+               git update-ref -d $ref_stash $current
        fi
 }
 
-save_stash () {
+create_stash () {
        stash_msg="$1"
 
        if no_changes
        then
-               echo >&2 'No local changes to save'
                exit 0
        fi
-       test -f "$GIT_DIR/logs/$ref_stash" ||
-               clear_stash || die "Cannot initialize stash"
-
-       # Make sure the reflog for stash is kept.
-       : >>"$GIT_DIR/logs/$ref_stash"
 
        # state of the base commit
        if b_commit=$(git rev-parse --verify HEAD)
@@ -84,6 +79,23 @@ save_stash () {
        w_commit=$(printf '%s\n' "$stash_msg" |
                git commit-tree $w_tree -p $b_commit -p $i_commit) ||
                die "Cannot record working tree state"
+}
+
+save_stash () {
+       stash_msg="$1"
+
+       if no_changes
+       then
+               echo >&2 'No local changes to save'
+               exit 0
+       fi
+       test -f "$GIT_DIR/logs/$ref_stash" ||
+               clear_stash || die "Cannot initialize stash"
+
+       create_stash "$stash_msg"
+
+       # Make sure the reflog for stash is kept.
+       : >>"$GIT_DIR/logs/$ref_stash"
 
        git update-ref -m "$stash_msg" $ref_stash $w_commit ||
                die "Cannot save the current status"
@@ -202,6 +214,13 @@ apply)
 clear)
        clear_stash
        ;;
+create)
+       if test $# -gt 0 && test "$1" = create
+       then
+               shift
+       fi
+       create_stash "$*" && echo "$w_commit"
+       ;;
 help | usage)
        usage
        ;;