aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMike McQuaid2016-08-25 11:40:18 +0100
committerMike McQuaid2016-08-25 11:45:59 +0100
commit46a3003a2f48f9feb595c318446402af35021b83 (patch)
tree7fc7de706ec19c0aeb789610d811e704611fdc2d /Library
parentdf21e5717963f89352b2821edeab8aa3e8d4a549 (diff)
downloadbrew-46a3003a2f48f9feb595c318446402af35021b83.tar.bz2
update.sh: reset pre-stash, die if stash fails.
A `git reset --hard` without stashing first risks nuking in-progress work. A `git reset --mixed` should allow stashing to occur more often on e.g. merge conflicts. Fixes #766.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/cmd/update.sh15
1 files changed, 12 insertions, 3 deletions
diff --git a/Library/Homebrew/cmd/update.sh b/Library/Homebrew/cmd/update.sh
index 7b57bde24..b052631fe 100644
--- a/Library/Homebrew/cmd/update.sh
+++ b/Library/Homebrew/cmd/update.sh
@@ -226,9 +226,18 @@ merge_or_rebase() {
fi
git merge --abort &>/dev/null
git rebase --abort &>/dev/null
- git -c "user.email=brew-update@localhost" \
- -c "user.name=brew update" \
- stash save --include-untracked "${QUIET_ARGS[@]}"
+ git reset --mixed "${QUIET_ARGS[@]}"
+ if ! git -c "user.email=brew-update@localhost" \
+ -c "user.name=brew update" \
+ stash save --include-untracked "${QUIET_ARGS[@]}"
+ then
+ odie <<EOS
+Could not `git stash` in $DIR!
+Please stash/commit manually if you need to keep your changes or, if not, run:
+ cd $DIR
+ git reset --hard origin/master
+EOS
+ fi
git reset --hard "${QUIET_ARGS[@]}"
STASHED="1"
fi