Thanks Junio and Peff for comments on the last round. Changes since then: - removed mention of the "new form" of git stash create from the Documentation. - Changed documentation for git stash without a verb, mentioning stash -p now being an alias for git stash push -p and that -- can be used as disambiguation for for pathspecs - Fixed ${1-...} which should have been ${1?...} - Removed unused new_style variable from create_stash, which was a leftover from perious rounds. Interdiff below: diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt index 97194576ef..369bfae33d 100644 --- a/Documentation/git-stash.txt +++ b/Documentation/git-stash.txt @@ -20,8 +20,6 @@ SYNOPSIS [--] [<pathspec>...]] 'git stash' clear 'git stash' create [<message>] -'git stash' create [-m <message>] [-u|--include-untracked <untracked|all>] - [-- <pathspec>...] 'git stash' store [-m|--message <message>] [-q|--quiet] <commit> DESCRIPTION @@ -55,10 +53,13 @@ push [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q Save your local modifications to a new 'stash', and run `git reset --hard` to revert them. The <message> part is optional and gives - the description along with the stashed state. For quickly making - a snapshot, you can omit _both_ "save" and <message>, but giving - only <message> does not trigger this action to prevent a misspelled - subcommand from making an unwanted stash. + the description along with the stashed state. ++ +For quickly making a snapshot, you can omit "push". In this mode, +non-option arguments are not allowed to prevent a misspelled +subcommand from making an unwanted stash. The two exceptions to this +are `stash -p` which acts as alias for `stash push -p` and pathspecs, +which are allowed after a double hyphen `--` for disambiguation. + When pathspec is given to 'git stash push', the new stash records the modified states only for the files that match the pathspec. The index diff --git a/git-stash.sh b/git-stash.sh index 1446fbe2e8..18aba1346f 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -61,17 +61,16 @@ clear_stash () { create_stash () { stash_msg= untracked= - new_style= while test $# != 0 do case "$1" in -m|--message) shift - stash_msg=${1-"BUG: create_stash () -m requires an argument"} + stash_msg=${1?"BUG: create_stash () -m requires an argument"} ;; -u|--include-untracked) shift - untracked=${1-"BUG: create_stash () -u requires an argument"} + untracked=${1?"BUG: create_stash () -u requires an argument"} ;; --) shift Thomas Gummerer (6): stash: introduce push verb stash: add test for the create command line arguments stash: refactor stash_create stash: teach 'push' (and 'create_stash') to honor pathspec stash: use stash_push for no verb form stash: allow pathspecs in the no verb form Documentation/git-stash.txt | 27 ++++++-- git-stash.sh | 127 ++++++++++++++++++++++++++++++------- t/t3903-stash.sh | 118 +++++++++++++++++++++++++++++++++- t/t3905-stash-include-untracked.sh | 26 ++++++++ 4 files changed, 267 insertions(+), 31 deletions(-) -- 2.12.0.rc2.399.g0ca89a282