From 24fb0068e7933bec7e74a632fce3c4d3d05559c4 Mon Sep 17 00:00:00 2001
From: Mike McQuaid
Date: Fri, 12 Aug 2016 14:22:00 +0100
Subject: [PATCH] update: add --force argument.
Add a `brew update --force` to side-step all of the clever optimisations
we have to detect if an update is unnecessary. That means if those
optimisations go wrong in future we can tell people just to run this
single command.
This would have been a useful workaround for the issue fixed in 985c672.
---
Library/Homebrew/cmd/update.sh | 16 ++++++++++++----
share/doc/homebrew/brew.1.html | 4 +++-
share/man/man1/brew.1 | 2 +-
3 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/Library/Homebrew/cmd/update.sh b/Library/Homebrew/cmd/update.sh
index 8078578a37..c907db1563 100644
--- a/Library/Homebrew/cmd/update.sh
+++ b/Library/Homebrew/cmd/update.sh
@@ -4,6 +4,8 @@
#:
#: If `--merge` is specified then `git merge` is used to include updates
#: (rather than `git rebase`).
+#: If `--force` is specified then always do a slower, full update check even
+#: if unnecessary.
# Hide shellcheck complaint:
# shellcheck source=/dev/null
@@ -293,6 +295,7 @@ homebrew-update() {
--verbose) HOMEBREW_VERBOSE=1 ;;
--debug) HOMEBREW_DEBUG=1 ;;
--merge) HOMEBREW_MERGE=1 ;;
+ --force) HOMEBREW_UPDATE_FORCE=1 ;;
--simulate-from-current-branch) HOMEBREW_SIMULATE_FROM_CURRENT_BRANCH=1 ;;
--preinstall) export HOMEBREW_UPDATE_PREINSTALL=1 ;;
--*) ;;
@@ -393,8 +396,11 @@ EOS
declare UPSTREAM_BRANCH"$TAP_VAR"="$UPSTREAM_BRANCH"
declare PREFETCH_REVISION"$TAP_VAR"="$(git rev-parse -q --verify refs/remotes/origin/"$UPSTREAM_BRANCH")"
- [[ -n "$SKIP_FETCH_BREW_REPOSITORY" && "$DIR" = "$HOMEBREW_REPOSITORY" ]] && continue
- [[ -n "$SKIP_FETCH_CORE_REPOSITORY" && "$DIR" = "$HOMEBREW_LIBRARY/Taps/homebrew/homebrew-core" ]] && continue
+ if [[ -z "$HOMEBREW_UPDATE_FORCE" ]]
+ then
+ [[ -n "$SKIP_FETCH_BREW_REPOSITORY" && "$DIR" = "$HOMEBREW_REPOSITORY" ]] && continue
+ [[ -n "$SKIP_FETCH_CORE_REPOSITORY" && "$DIR" = "$HOMEBREW_LIBRARY/Taps/homebrew/homebrew-core" ]] && continue
+ fi
# The upstream repository's default branch may not be master;
# check refs/remotes/origin/HEAD to see what the default
@@ -431,7 +437,7 @@ EOS
"https://api.github.com/repos/$UPSTREAM_REPOSITORY/commits/$UPSTREAM_BRANCH")"
# Touch FETCH_HEAD to confirm we've checked for an update.
[[ -f "$DIR/.git/FETCH_HEAD" ]] && touch "$DIR/.git/FETCH_HEAD"
- [[ "$UPSTREAM_SHA_HTTP_CODE" = "304" ]] && exit
+ [[ -z "$HOMEBREW_UPDATE_FORCE" ]] && [[ "$UPSTREAM_SHA_HTTP_CODE" = "304" ]] && exit
elif [[ -n "$HOMEBREW_UPDATE_PREINSTALL" ]]
then
# Don't try to do a `git fetch` that may take longer than expected.
@@ -484,7 +490,8 @@ EOS
if [[ -n "$HOMEBREW_SIMULATE_FROM_CURRENT_BRANCH" ]]
then
simulate_from_current_branch "$DIR" "$TAP_VAR" "$UPSTREAM_BRANCH" "$CURRENT_REVISION"
- elif [[ "$PREFETCH_REVISION" = "$POSTFETCH_REVISION" ]] &&
+ elif [[ -z "$HOMEBREW_UPDATE_FORCE" ]] &&
+ [[ "$PREFETCH_REVISION" = "$POSTFETCH_REVISION" ]] &&
[[ "$CURRENT_REVISION" = "$POSTFETCH_REVISION" ]]
then
export HOMEBREW_UPDATE_BEFORE"$TAP_VAR"="$CURRENT_REVISION"
@@ -499,6 +506,7 @@ EOS
if [[ -n "$HOMEBREW_UPDATED" ||
-n "$HOMEBREW_UPDATE_FAILED" ||
+ -n "$HOMEBREW_UPDATE_FORCE" ||
(-n "$HOMEBREW_DEVELOPER" && -z "$HOMEBREW_UPDATE_PREINSTALL") ]]
then
brew update-report "$@"
diff --git a/share/doc/homebrew/brew.1.html b/share/doc/homebrew/brew.1.html
index e25222cd10..9e3df53b7e 100644
--- a/share/doc/homebrew/brew.1.html
+++ b/share/doc/homebrew/brew.1.html
@@ -440,7 +440,9 @@ source. This is useful for creating patches for the software.
git
(1).
If --merge
is specified then git merge
is used to include updates
- (rather than git rebase
).
+ (rather than git rebase
).
+If --force
is specified then always do a slower, full update check even
+ if unnecessary.
upgrade
[install-options] [--cleanup
] [--fetch-HEAD
] [formulae]Upgrade outdated, unpinned brews.
Options for the install
command are also valid here.
diff --git a/share/man/man1/brew.1 b/share/man/man1/brew.1
index 2b6a16380b..b64676513e 100644
--- a/share/man/man1/brew.1
+++ b/share/man/man1/brew.1
@@ -597,7 +597,7 @@ Remove a tapped repository\.
Fetch the newest version of Homebrew and all formulae from GitHub using \fBgit\fR(1)\.
.
.IP
-If \fB\-\-merge\fR is specified then \fBgit merge\fR is used to include updates (rather than \fBgit rebase\fR)\.
+If \fB\-\-merge\fR is specified then \fBgit merge\fR is used to include updates (rather than \fBgit rebase\fR)\. If \fB\-\-force\fR is specified then always do a slower, full update check even if unnecessary\.
.
.TP
\fBupgrade\fR [\fIinstall\-options\fR] [\fB\-\-cleanup\fR] [\fB\-\-fetch\-HEAD\fR] [\fIformulae\fR]