From: Thomas Gummerer <t.gummerer@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>,
"Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
sunny@sunbase.org, "Jakub Narębski" <jnareb@gmail.com>,
"Matthieu Moy" <Matthieu.Moy@grenoble-inp.fr>,
"Thomas Gummerer" <t.gummerer@gmail.com>
Subject: [PATCH v7 0/6] stash: support pathspec argument
Date: Sat, 25 Feb 2017 21:33:00 +0000 [thread overview]
Message-ID: <20170225213306.2410-1-t.gummerer@gmail.com> (raw)
In-Reply-To: <20170219110313.24070-1-t.gummerer@gmail.com>
Thanks Junio for more comments on the last round, and Peff for reading
through it as well.
Changes since v6:
- If no --include-untracked option is given to git stash push, and a
pathspec is not in the repository, error out instead of ignoring
it. This brings it in line with things like checkout, and also
allows us to simplify the code internally.
- Simplify the code for rolling back the changes from the working
tree. This is enabled by the changes to the pathspec handling.
- There's no more "xargs -0", so there should be no more portability
concerns.
- Adjust the tests and improve some of the titles a bit
Interdiff:
diff --git a/git-stash.sh b/git-stash.sh
index 18aba1346f..28d0624c75 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -278,12 +278,15 @@ push_stash () {
die "$(gettext "Can't use --patch and --include-untracked or --all at the same time")"
fi
+ test -n "$untracked" || git ls-files --error-unmatch -- "$@" >/dev/null || exit 1
+
git update-index -q --refresh
if no_changes "$@"
then
say "$(gettext "No local changes to save")"
exit 0
fi
+
git reflog exists $ref_stash ||
clear_stash || die "$(gettext "Cannot initialize stash")"
@@ -296,23 +299,9 @@ push_stash () {
then
if test $# != 0
then
- saved_untracked=
- if test -n "$(git ls-files --others -- "$@")"
- then
- saved_untracked=$(
- git ls-files -z --others -- "$@" |
- xargs -0 git stash create -u all --)
- fi
- git ls-files -z -- "$@" | xargs -0 git reset ${GIT_QUIET:+-q} --
- git ls-files -z --modified -- "$@" | xargs -0 git checkout ${GIT_QUIET:+-q} HEAD --
- if test -n "$(git ls-files -z --others -- "$@")"
- then
- git ls-files -z --others -- "$@" | xargs -0 git clean --force -d ${GIT_QUIET:+-q} --
- fi
- if test -n "$saved_untracked"
- then
- git stash pop -q $saved_untracked
- fi
+ git reset ${GIT_QUIET:+-q} -- "$@"
+ git checkout ${GIT_QUIET:+-q} HEAD -- $(git ls-files -z --modified "$@")
+ git clean --force ${GIT_QUIET:+-q} -d -- "$@"
else
git reset --hard ${GIT_QUIET:+-q}
fi
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index c0ae41e724..f7733b4dd4 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -800,7 +800,7 @@ test_expect_success 'create with multiple arguments for the message' '
test_cmp expect actual
'
-test_expect_success 'stash -- <filename> stashes and restores the file' '
+test_expect_success 'stash -- <pathspec> stashes and restores the file' '
>foo &&
>bar &&
git add foo bar &&
@@ -812,7 +812,7 @@ test_expect_success 'stash -- <filename> stashes and restores the file' '
test_path_is_file bar
'
-test_expect_success 'stash with multiple filename arguments' '
+test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
@@ -842,25 +842,29 @@ test_expect_success 'stash with file including $IFS character' '
test_path_is_file bar
'
-test_expect_success 'stash push -p with pathspec shows no changes only onece' '
- >file &&
- git add file &&
- git stash push -p not-file >actual &&
+test_expect_success 'stash push -p with pathspec shows no changes only once' '
+ >foo &&
+ git add foo &&
+ git commit -m "tmp" &&
+ git stash push -p foo >actual &&
echo "No local changes to save" >expect &&
+ git reset --hard HEAD~ &&
test_cmp expect actual
'
test_expect_success 'stash push with pathspec shows no changes when there are none' '
- >file &&
- git add file &&
- git stash push not-file >actual &&
+ >foo &&
+ git add foo &&
+ git commit -m "tmp" &&
+ git stash push foo >actual &&
echo "No local changes to save" >expect &&
+ git reset --hard HEAD~ &&
test_cmp expect actual
'
-test_expect_success 'untracked file is not removed when using pathspecs' '
+test_expect_success 'stash push with pathspec not in the repository errors out' '
>untracked &&
- git stash push untracked &&
+ test_must_fail git stash push untracked &&
test_path_is_file untracked
'
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 | 25 ++++++--
git-stash.sh | 114 +++++++++++++++++++++++++++-------
t/t3903-stash.sh | 122 ++++++++++++++++++++++++++++++++++++-
t/t3905-stash-include-untracked.sh | 26 ++++++++
4 files changed, 257 insertions(+), 30 deletions(-)
--
2.11.0.301.g275aeb250c.dirty
next prev parent reply other threads:[~2017-02-25 20:29 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <mailto:20170205202642.14216-1-t.gummerer@gmail.com>
2017-02-12 21:54 ` [PATCH v4 0/7] stash: support pathspec argument Thomas Gummerer
2017-02-12 21:54 ` [PATCH v4 1/7] Documentation/stash: remove mention of git reset --hard Thomas Gummerer
2017-02-12 21:54 ` [PATCH v4 2/7] stash: introduce push verb Thomas Gummerer
2017-02-12 21:54 ` [PATCH v4 3/7] stash: add test for the create command line arguments Thomas Gummerer
2017-02-12 21:54 ` [PATCH v4 4/7] stash: introduce new format create Thomas Gummerer
[not found] ` <vpqefz0ohub.fsf@anie.imag.fr>
2017-02-14 21:40 ` Thomas Gummerer
2017-02-12 21:54 ` [PATCH v4 5/7] stash: teach 'push' (and 'create') to honor pathspec Thomas Gummerer
2017-02-12 21:54 ` [PATCH v4 6/7] stash: use stash_push for no verb form Thomas Gummerer
2017-02-12 21:54 ` [PATCH v4 7/7] stash: allow pathspecs in the " Thomas Gummerer
2017-02-12 22:07 ` [PATCH v4 0/7] stash: support pathspec argument Thomas Gummerer
2017-02-17 22:41 ` [PATCH v5 0/6] " Thomas Gummerer
2017-02-17 22:41 ` [PATCH v5 1/6] stash: introduce push verb Thomas Gummerer
2017-02-17 22:41 ` [PATCH v5 2/6] stash: add test for the create command line arguments Thomas Gummerer
2017-02-17 22:41 ` [PATCH v5 3/6] stash: refactor stash_create Thomas Gummerer
2017-02-17 23:48 ` Jeff King
2017-02-19 9:17 ` Thomas Gummerer
2017-02-17 22:41 ` [PATCH v5 4/6] stash: teach 'push' (and 'create_stash') to honor pathspec Thomas Gummerer
2017-02-17 22:41 ` [PATCH v5 5/6] stash: use stash_push for no verb form Thomas Gummerer
2017-02-17 22:41 ` [PATCH v5 6/6] stash: allow pathspecs in the " Thomas Gummerer
2017-02-17 23:46 ` Jeff King
2017-02-19 9:18 ` Thomas Gummerer
2017-02-17 23:01 ` [PATCH v5 0/6] stash: support pathspec argument Junio C Hamano
2017-02-17 23:12 ` Thomas Gummerer
2017-02-17 23:14 ` Junio C Hamano
[not found] ` <xmqqr32wph97.fsf@gitster.mtv.corp.google.com>
2017-02-17 23:06 ` Thomas Gummerer
2017-02-19 11:03 ` [PATCH v6 " Thomas Gummerer
2017-02-19 11:03 ` [PATCH v6 1/6] stash: introduce push verb Thomas Gummerer
2017-02-19 11:03 ` [PATCH v6 2/6] stash: add test for the create command line arguments Thomas Gummerer
2017-02-19 11:03 ` [PATCH v6 3/6] stash: refactor stash_create Thomas Gummerer
2017-02-19 11:03 ` [PATCH v6 4/6] stash: teach 'push' (and 'create_stash') to honor pathspec Thomas Gummerer
2017-02-21 16:55 ` Junio C Hamano
2017-02-25 20:27 ` Thomas Gummerer
2017-02-19 11:03 ` [PATCH v6 5/6] stash: use stash_push for no verb form Thomas Gummerer
2017-02-19 11:03 ` [PATCH v6 6/6] stash: allow pathspecs in the " Thomas Gummerer
2017-02-20 7:57 ` [PATCH v6 0/6] stash: support pathspec argument Jeff King
2017-02-20 8:22 ` Junio C Hamano
2017-02-20 19:39 ` Junio C Hamano
2017-02-25 15:57 ` Thomas Gummerer
2017-02-25 21:33 ` Thomas Gummerer [this message]
2017-02-25 21:33 ` [PATCH v7 1/6] stash: introduce push verb Thomas Gummerer
2017-02-25 21:33 ` [PATCH v7 2/6] stash: add test for the create command line arguments Thomas Gummerer
2017-02-25 21:33 ` [PATCH v7 3/6] stash: refactor stash_create Thomas Gummerer
2017-02-25 21:33 ` [PATCH v7 4/6] stash: teach 'push' (and 'create_stash') to honor pathspec Thomas Gummerer
2017-02-27 20:32 ` Junio C Hamano
2017-02-27 20:35 ` Junio C Hamano
2017-02-27 21:56 ` Thomas Gummerer
2017-02-27 22:58 ` Junio C Hamano
2017-02-27 21:09 ` Junio C Hamano
2017-02-27 21:53 ` Thomas Gummerer
2017-02-25 21:33 ` [PATCH v7 5/6] stash: use stash_push for no verb form Thomas Gummerer
2017-02-25 21:33 ` [PATCH v7 6/6] stash: allow pathspecs in the " Thomas Gummerer
2017-02-28 20:33 ` [PATCH v8 0/6] stash: support pathspec argument Thomas Gummerer
2017-02-28 20:33 ` [PATCH v8 1/6] stash: introduce push verb Thomas Gummerer
2017-02-28 20:33 ` [PATCH v8 2/6] stash: add test for the create command line arguments Thomas Gummerer
2017-02-28 20:33 ` [PATCH v8 3/6] stash: refactor stash_create Thomas Gummerer
2017-02-28 20:33 ` [PATCH v8 4/6] stash: teach 'push' (and 'create_stash') to honor pathspec Thomas Gummerer
2017-02-28 22:15 ` Junio C Hamano
2017-03-01 21:57 ` Thomas Gummerer
2017-03-01 22:43 ` Junio C Hamano
2017-02-28 20:33 ` [PATCH v8 5/6] stash: use stash_push for no verb form Thomas Gummerer
2017-02-28 20:33 ` [PATCH v8 6/6] stash: allow pathspecs in the " Thomas Gummerer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170225213306.2410-1-t.gummerer@gmail.com \
--to=t.gummerer@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jnareb@gmail.com \
--cc=peff@peff.net \
--cc=sunny@sunbase.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.