From: "Randall S. Becker" <rsbecker@nexbridge.com>
To: <git@vger.kernel.org>
Subject: [RFC] git stash --snapshot
Date: Thu, 21 Mar 2019 18:58:47 -0400 [thread overview]
Message-ID: <002101d4e039$a7cd8a10$f7689e30$@nexbridge.com> (raw)
About two weeks ago there was a discussion about building an undo stack.
https://public-inbox.org/git/000401d4d6c8$f68bb020$e3a31060$@nexbridge.com/
it had me thinking about whether a stash --snapshot might be useful. Below
is a conceptual change - by no means even close to complete. This would
allow scripting to wrap critical commands with a "git stash push --snapshot"
without changing the working directory. For symmetry, a "git stash pop
--force" is needed if --include-untracked were used to stash everything in
the first place. It might be more useful also to wait until stash is
converted to C, I suppose. I'm wondering whether to pursue this or drop it.
Thoughts? (and I beg forgiveness for what my mailer might do to the wrapping
of this patch, and I already know the indent is wrong between 329 and 370,
and that the granularity of the --force option is wrong).
diff --git a/git-stash.sh b/git-stash.sh
index 789ce2f41d..7741192980 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -5,12 +5,13 @@ dashless=$(basename "$0" | sed -e 's/-/ /')
USAGE="list [<options>]
or: $dashless show [<stash>]
or: $dashless drop [-q|--quiet] [<stash>]
- or: $dashless ( pop | apply ) [--index] [-q|--quiet] [<stash>]
+ or: $dashless ( pop | apply ) [--index] [-q|--quiet] [-f|--force]
[<stash>]
or: $dashless branch <branchname> [<stash>]
or: $dashless save [--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [<message>]
or: $dashless [push [--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [-m <message>]
+ [--snapshot]
[-- <pathspec>...]]
or: $dashless clear"
@@ -252,6 +253,7 @@ push_stash () {
patch_mode=
untracked=
stash_msg=
+ snapshot=
while test $# != 0
do
case "$1" in
@@ -286,6 +288,9 @@ push_stash () {
--message=*)
stash_msg=${1#--message=}
;;
+ --snapshot)
+ snapshot=t
+ ;;
--help)
show_help
;;
@@ -329,6 +334,8 @@ push_stash () {
die "$(gettext "Cannot save the current status")"
say "$(eval_gettext "Saved working directory and index state
\$stash_msg")"
+ if test -z "$snapshot"
+ then
if test -z "$patch_mode"
then
test "$untracked" = "all" && CLEAN_X_OPTION=-x ||
CLEAN_X_OPTION=
@@ -363,6 +370,7 @@ push_stash () {
git reset -q -- "$@"
fi
fi
+ fi
}
save_stash () {
@@ -490,6 +498,7 @@ parse_flags_and_rev()
FLAGS=
REV=
+ FORCE_OPTION=
for opt
do
case "$opt" in
@@ -499,6 +508,9 @@ parse_flags_and_rev()
--index)
INDEX_OPTION=--index
;;
+ -f|--force)
+ FORCE_OPTION=--force
+ ;;
--help)
show_help
;;
@@ -607,7 +619,7 @@ apply_stash () {
if test -n "$u_tree"
then
GIT_INDEX_FILE="$TMPindex" git read-tree "$u_tree" &&
- GIT_INDEX_FILE="$TMPindex" git checkout-index --all &&
+ GIT_INDEX_FILE="$TMPindex" git checkout-index --all
$FORCE_OPTION &&
rm -f "$TMPindex" ||
die "$(gettext "Could not restore untracked files from stash
entry")"
fi
@@ -688,7 +700,7 @@ apply_to_branch () {
set -- --index "$@"
assert_stash_like "$@"
- git checkout -b $branch $REV^ &&
+ git checkout -b $branch $FORCE_OPTION $REV^ &&
apply_stash "$@" && {
test -z "$IS_STASH_REF" || drop_stash "$@"
}
Regards,
Randall
-- Brief whoami:
NonStop developer since approximately 211288444200000000
UNIX developer since approximately 421664400
-- In my real life, I talk too much.
next reply other threads:[~2019-03-21 22:59 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-21 22:58 Randall S. Becker [this message]
2019-03-31 22:07 ` [RFC] git stash --snapshot 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='002101d4e039$a7cd8a10$f7689e30$@nexbridge.com' \
--to=rsbecker@nexbridge.com \
--cc=git@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).