update.sh: further speed up brew update.
Tweak the logic further to make the no-op case even faster. Before: ``` brew update 1.10s user 1.05s system 92% cpu 2.325 total brew update --preinstall 0.60s user 0.77s system 96% cpu 1.433 total ``` After: ``` brew update 0.60s user 0.34s system 83% cpu 1.132 total brew update --preinstall 0.29s user 0.24s system 62% cpu 0.860 total ``` These times are now fast enough to avoid any further special-casing for `--preinstall`, roll it out to users by default and not print a message unless we've actually found some updates.
This commit is contained in:
parent
33912e218e
commit
11116c2467
@ -166,33 +166,22 @@ reset_on_interrupt() {
|
||||
exit 130
|
||||
}
|
||||
|
||||
pull() {
|
||||
if [[ -n "$HOMEBREW_VERBOSE" ]]
|
||||
then
|
||||
echo "Updating $DIR..."
|
||||
fi
|
||||
|
||||
# Used for testing purposes, e.g., for testing formula migration after
|
||||
# renaming it in the currently checked-out branch. To test run
|
||||
# "brew update --simulate-from-current-branch"
|
||||
simulate_from_current_branch() {
|
||||
local DIR
|
||||
local TAP_VAR
|
||||
local UPSTREAM_BRANCH
|
||||
local CURRENT_REVISION
|
||||
|
||||
DIR="$1"
|
||||
cd "$DIR" || return
|
||||
TAP_VAR=$(repo_var "$DIR")
|
||||
unset STASHED
|
||||
TAP_VAR="$2"
|
||||
UPSTREAM_BRANCH="$3"
|
||||
CURRENT_REVISION="$4"
|
||||
|
||||
# The upstream repository's default branch may not be master;
|
||||
# check refs/remotes/origin/HEAD to see what the default
|
||||
# origin branch name is, and use that. If not set, fall back to "master".
|
||||
INITIAL_BRANCH="$(git symbolic-ref --short HEAD 2>/dev/null)"
|
||||
UPSTREAM_BRANCH="$(upstream_branch)"
|
||||
|
||||
# Used for testing purposes, e.g., for testing formula migration after
|
||||
# renaming it in the currently checked-out branch. To test run
|
||||
# "brew update --simulate-from-current-branch"
|
||||
if [[ -n "$HOMEBREW_SIMULATE_FROM_CURRENT_BRANCH" ]]
|
||||
then
|
||||
INITIAL_REVISION="$(git rev-parse -q --verify "$UPSTREAM_BRANCH")"
|
||||
CURRENT_REVISION="$(read_current_revision)"
|
||||
export HOMEBREW_UPDATE_BEFORE"$TAP_VAR"="$INITIAL_REVISION"
|
||||
export HOMEBREW_UPDATE_AFTER"$TAP_VAR"="$CURRENT_REVISION"
|
||||
if [[ "$INITIAL_REVISION" != "$CURRENT_REVISION" ]]
|
||||
@ -203,9 +192,24 @@ pull() {
|
||||
then
|
||||
odie "Your $DIR HEAD is not a descendant of $UPSTREAM_BRANCH!"
|
||||
fi
|
||||
return
|
||||
}
|
||||
|
||||
merge_or_rebase() {
|
||||
if [[ -n "$HOMEBREW_VERBOSE" ]]
|
||||
then
|
||||
echo "Updating $DIR..."
|
||||
fi
|
||||
|
||||
local DIR
|
||||
local TAP_VAR
|
||||
local UPSTREAM_BRANCH
|
||||
|
||||
DIR="$1"
|
||||
cd "$DIR" || return
|
||||
TAP_VAR="$2"
|
||||
UPSTREAM_BRANCH="$3"
|
||||
unset STASHED
|
||||
|
||||
trap reset_on_interrupt SIGINT
|
||||
|
||||
if [[ -n "$(git status --untracked-files=all --porcelain 2>/dev/null)" ]]
|
||||
@ -223,6 +227,7 @@ pull() {
|
||||
STASHED="1"
|
||||
fi
|
||||
|
||||
INITIAL_BRANCH="$(git symbolic-ref --short HEAD 2>/dev/null)"
|
||||
if [[ "$INITIAL_BRANCH" != "$UPSTREAM_BRANCH" && -n "$INITIAL_BRANCH" ]]
|
||||
then
|
||||
# Recreate and check out `#{upstream_branch}` if unable to fast-forward
|
||||
@ -329,11 +334,6 @@ user account:
|
||||
EOS
|
||||
fi
|
||||
|
||||
if [[ -n "$HOMEBREW_UPDATE_PREINSTALL" ]]
|
||||
then
|
||||
echo "Checking for Homebrew updates..."
|
||||
fi
|
||||
|
||||
if ! git --version >/dev/null 2>&1
|
||||
then
|
||||
# we cannot install brewed git if homebrew/core is unavailable.
|
||||
@ -378,20 +378,35 @@ EOS
|
||||
for DIR in "$HOMEBREW_REPOSITORY" "$HOMEBREW_LIBRARY"/Taps/*/*
|
||||
do
|
||||
[[ -d "$DIR/.git" ]] || continue
|
||||
cd "$DIR" || continue
|
||||
|
||||
TAP_VAR="$(repo_var "$DIR")"
|
||||
declare PREFETCH_REVISION"$TAP_VAR"="$(read_current_revision)"
|
||||
|
||||
[[ -n "$SKIP_FETCH_BREW_REPOSITORY" && "$DIR" = "$HOMEBREW_REPOSITORY" ]] && continue
|
||||
[[ -n "$SKIP_FETCH_CORE_REPOSITORY" && "$DIR" = "$HOMEBREW_LIBRARY/Taps/homebrew/homebrew-core" ]] && continue
|
||||
cd "$DIR" || continue
|
||||
|
||||
# The upstream repository's default branch may not be master;
|
||||
# check refs/remotes/origin/HEAD to see what the default
|
||||
# origin branch name is, and use that. If not set, fall back to "master".
|
||||
UPSTREAM_BRANCH="$(upstream_branch)"
|
||||
declare UPSTREAM_BRANCH"$TAP_VAR"="$UPSTREAM_BRANCH"
|
||||
|
||||
# the refspec ensures that the default upstream branch gets updated
|
||||
(
|
||||
if [[ -n "$HOMEBREW_UPDATE_PREINSTALL" ]]
|
||||
then
|
||||
# Skip taps checked/fetched recently
|
||||
[[ -n "$(find "$DIR/.git/FETCH_HEAD" -type f -mmin -1 2>/dev/null)" ]] && exit
|
||||
# Skip taps without formulae.
|
||||
[[ -n "$(find "$DIR/.git/FETCH_HEAD" -type f -mtime -60s 2>/dev/null)" ]] && exit
|
||||
|
||||
# Skip taps without formulae (but always update Homebrew/brew and Homebrew/homebrew-core)
|
||||
if [[ "$DIR" != "$HOMEBREW_REPOSITORY" &&
|
||||
"$DIR" != "$HOMEBREW_LIBRARY/Taps/homebrew/homebrew-core" ]]
|
||||
then
|
||||
FORMULAE="$(find "$DIR" -maxdepth 1 \( -name "*.rb" -or -name Formula -or -name HomebrewFormula \) -print -quit)"
|
||||
[[ -z "$FORMULAE" ]] && exit
|
||||
fi
|
||||
fi
|
||||
|
||||
UPSTREAM_REPOSITORY_URL="$(git config remote.origin.url)"
|
||||
if [[ "$UPSTREAM_REPOSITORY_URL" = "https://github.com/"* ]]
|
||||
@ -448,7 +463,27 @@ EOS
|
||||
for DIR in "$HOMEBREW_REPOSITORY" "$HOMEBREW_LIBRARY"/Taps/*/*
|
||||
do
|
||||
[[ -d "$DIR/.git" ]] || continue
|
||||
pull "$DIR"
|
||||
cd "$DIR" || continue
|
||||
|
||||
TAP_VAR="$(repo_var "$DIR")"
|
||||
UPSTREAM_BRANCH_VAR="UPSTREAM_BRANCH$TAP_VAR"
|
||||
UPSTREAM_BRANCH="${!UPSTREAM_BRANCH_VAR}"
|
||||
CURRENT_REVISION="$(read_current_revision)"
|
||||
|
||||
PREFETCH_REVISION_VAR="PREFETCH_REVISION$TAP_VAR"
|
||||
PREFETCH_REVISION="${!PREFETCH_REVISION_VAR}"
|
||||
|
||||
if [[ -n "$HOMEBREW_SIMULATE_FROM_CURRENT_BRANCH" ]]
|
||||
then
|
||||
simulate_from_current_branch "$DIR" "$TAP_VAR" "$UPSTREAM_BRANCH" "$CURRENT_REVISION"
|
||||
elif [[ "$PREFETCH_REVISION" = "$CURRENT_REVISION" ]]
|
||||
then
|
||||
export HOMEBREW_UPDATE_BEFORE"$TAP_VAR"="$CURRENT_REVISION"
|
||||
export HOMEBREW_UPDATE_AFTER"$TAP_VAR"="$CURRENT_REVISION"
|
||||
else
|
||||
merge_or_rebase "$DIR" "$TAP_VAR" "$UPSTREAM_BRANCH"
|
||||
fi
|
||||
|
||||
[[ -n "$HOMEBREW_VERBOSE" ]] && echo
|
||||
done
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user