[Note: cross-posted to the magit list to see if anyone else has this
problem.]
For a while now I had a problem when I try to do stash operations via
magit -- for example, it shows this in the process buffer:
$ git --no-pager stash apply stash@{2012-04-27 08:53:30 -0400}
Too many revisions specified: stash@{2012-04-27 08:53:30 -0400}
I tracked this down to this part of the script:
REV=$(git rev-parse --no-flags --symbolic "$@") || exit 1
...
set -- $REV
where $REV has one symbolic name but the name has spaces in it. (This
was introduced two years ago, in ef76312.)
Removing the --symbolic flag could solve this but it looks like it's
needed for error reporting. Instead, I tweaked IFS so it's split
correctly and added some quotations later in the script where $1 and
$REV are used without quotes. (I also moved the "REV=..." line next
to the "set -- $REV", since the chunk of code between them isn't using
$REV.)
The following is the diff -- if it looks right I can send a properly
formatted patch.
-------------------------------------------------------------------------------
diff --git a/git-stash.sh b/git-stash.sh
index 4e2c7f8..10a264b 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -33,6 +33,8 @@ else
reset_color=
fi
+NEWLINE="
+"
no_changes () {
git diff-index --quiet --cached HEAD --ignore-submodules -- &&
git diff-files --quiet --ignore-submodules &&
@@ -327,8 +329,6 @@ parse_flags_and_rev()
i_tree=
u_tree=
- REV=$(git rev-parse --no-flags --symbolic "$@") || exit 1
-
FLAGS=
for opt
do
@@ -345,7 +345,9 @@ parse_flags_and_rev()
esac
done
- set -- $REV
+ REV=$(git rev-parse --no-flags --symbolic "$@") || exit 1
+
+ OIFS="$IFS"; IFS="$NEWLINE"; set -- $REV; IFS="$OIFS"
case $# in
0)
@@ -360,13 +362,13 @@ parse_flags_and_rev()
;;
esac
- REV=$(git rev-parse --quiet --symbolic --verify $1 2>/dev/null) || {
+ REV=$(git rev-parse --quiet --symbolic --verify "$1" 2>/dev/null) || {
reference="$1"
die "$(eval_gettext "\$reference is not valid reference")"
}
- i_commit=$(git rev-parse --quiet --verify $REV^2 2>/dev/null) &&
- set -- $(git rev-parse $REV $REV^1 $REV: $REV^1: $REV^2: 2>/dev/null) &&
+ i_commit=$(git rev-parse --quiet --verify "$REV^2" 2>/dev/null) &&
+ set -- $(git rev-parse "$REV" "$REV^1" "$REV:" "$REV^1:" "$REV^2:"
2>/dev/null) &&
s=$1 &&
w_commit=$1 &&
b_commit=$2 &&
@@ -377,8 +379,8 @@ parse_flags_and_rev()
test "$ref_stash" = "$(git rev-parse --symbolic-full-name "${REV%@*}")"
&&
IS_STASH_REF=t
- u_commit=$(git rev-parse --quiet --verify $REV^3 2>/dev/null) &&
- u_tree=$(git rev-parse $REV^3: 2>/dev/null)
+ u_commit=$(git rev-parse --quiet --verify "$REV^3" 2>/dev/null) &&
+ u_tree=$(git rev-parse "$REV^3:" 2>/dev/null)
}
is_stash_like()
-------------------------------------------------------------------------------
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!