git stash create currently supports a positional argument for adding a
message.  This is not quite in line with how git commands usually take
comments (using a -m flag).

Add a new syntax for adding a message to git stash create using a -m
flag.  This is with the goal of deprecating the old style git stash
create with positional arguments.

This also adds a -u argument, for untracked files.  This is already used
internally as another positional argument, but can now be used from the
command line.

Signed-off-by: Thomas Gummerer <t.gumme...@gmail.com>
---
 Documentation/git-stash.txt |  1 +
 git-stash.sh                | 50 +++++++++++++++++++++++++++++++++++++++++----
 t/t3903-stash.sh            |  9 ++++++++
 3 files changed, 56 insertions(+), 4 deletions(-)

diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index 2e9e344cd7..a138ed6a24 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -17,6 +17,7 @@ SYNOPSIS
             [-u|--include-untracked] [-a|--all] [<message>]]
 'git stash' clear
 'git stash' create [<message>]
+'git stash' create [-m <message>] [-u|--include-untracked <untracked|all>]
 'git stash' store [-m|--message <message>] [-q|--quiet] <commit>
 
 DESCRIPTION
diff --git a/git-stash.sh b/git-stash.sh
index bf7863a846..33b2d0384c 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -56,8 +56,50 @@ clear_stash () {
 }
 
 create_stash () {
-       stash_msg="$1"
-       untracked="$2"
+       stash_msg=
+       untracked=
+       new_style=
+       while test $# != 0
+       do
+               case "$1" in
+               -m|--message)
+                       shift
+                       stash_msg=${1?"-m needs an argument"}
+                       new_style=t
+                       ;;
+               -u|--include-untracked)
+                       shift
+                       untracked="$1"
+                       new_style=t
+                       ;;
+               *)
+                       if test -n "$new_style"
+                       then
+                               echo "invalid argument"
+                               option="$1"
+                               # TRANSLATORS: $option is an invalid option, 
like
+                               # `--blah-blah'. The 7 spaces at the beginning 
of the
+                               # second line correspond to "error: ". So you 
should line
+                               # up the second line with however many 
characters the
+                               # translation of "error: " takes in your 
language. E.g. in
+                               # English this is:
+                               #
+                               #    $ git stash save --blah-blah 2>&1 | head 
-n 2
+                               #    error: unknown option for 'stash save': 
--blah-blah
+                               #           To provide a message, use git stash 
save -- '--blah-blah'
+                               eval_gettextln "error: unknown option for 
'stash create': \$option"
+                               usage
+                       fi
+                       break
+                       ;;
+               esac
+               shift
+       done
+
+       if test -z "$new_style"
+       then
+               stash_msg="$*"
+       fi
 
        git update-index -q --refresh
        if no_changes
@@ -265,7 +307,7 @@ push_stash () {
        git reflog exists $ref_stash ||
                clear_stash || die "$(gettext "Cannot initialize stash")"
 
-       create_stash "$stash_msg" $untracked
+       create_stash -m "$stash_msg" -u "$untracked"
        store_stash -m "$stash_msg" -q $w_commit ||
        die "$(gettext "Cannot save the current status")"
        say "$(eval_gettext "Saved working directory and index state 
\$stash_msg")"
@@ -667,7 +709,7 @@ clear)
        ;;
 create)
        shift
-       create_stash "$*" && echo "$w_commit"
+       create_stash "$@" && echo "$w_commit"
        ;;
 store)
        shift
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index 21cb70dc74..b859e51086 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -802,4 +802,13 @@ test_expect_success 'create with multiple arguments for 
the message' '
        test_cmp expect actual
 '
 
+test_expect_success 'new style stash create stores correct message' '
+       >foo &&
+       git add foo &&
+       STASH_ID=$(git stash create -m "create test message new style") &&
+       echo "On master: create test message new style" >expect &&
+       git show --pretty=%s ${STASH_ID} | head -n1 >actual &&
+       test_cmp expect actual
+'
+
 test_done
-- 
2.12.0.rc0.208.g81c5d00b20.dirty

Reply via email to