Skip to content

Commit

Permalink
Merge branch 'oa/stash-na'
Browse files Browse the repository at this point in the history
* oa/stash-na:
  git stash: Give friendlier errors when there is nothing to apply
  • Loading branch information
Junio C Hamano committed Aug 25, 2009
2 parents b85e6c5 + 5fd448f commit b91069a
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions git-stash.sh
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,6 @@ show_stash () {
}

apply_stash () {
git update-index -q --refresh &&
git diff-files --quiet --ignore-submodules ||
die 'Cannot apply to a dirty working tree, please stage your changes'

unstash_index=

while test $# != 0
Expand All @@ -184,18 +180,27 @@ apply_stash () {
shift
done

# current index state
c_tree=$(git write-tree) ||
die 'Cannot apply a stash in the middle of a merge'
if test $# = 0
then
have_stash || die 'Nothing to apply'
fi

# stash records the work tree, and is a merge between the
# base commit (first parent) and the index tree (second parent).
s=$(git rev-parse --verify --default $ref_stash "$@") &&
w_tree=$(git rev-parse --verify "$s:") &&
b_tree=$(git rev-parse --verify "$s^1:") &&
i_tree=$(git rev-parse --verify "$s^2:") ||
s=$(git rev-parse --quiet --verify --default $ref_stash "$@") &&
w_tree=$(git rev-parse --quiet --verify "$s:") &&
b_tree=$(git rev-parse --quiet --verify "$s^1:") &&
i_tree=$(git rev-parse --quiet --verify "$s^2:") ||
die "$*: no valid stashed state found"

git update-index -q --refresh &&
git diff-files --quiet --ignore-submodules ||
die 'Cannot apply to a dirty working tree, please stage your changes'

# current index state
c_tree=$(git write-tree) ||
die 'Cannot apply a stash in the middle of a merge'

unstashed_index_tree=
if test -n "$unstash_index" && test "$b_tree" != "$i_tree" &&
test "$c_tree" != "$i_tree"
Expand Down

0 comments on commit b91069a

Please sign in to comment.