2020-07-28 11:49:50 +01:00
|
|
|
#: * `update` [<options>]
|
2016-04-08 16:28:43 +02:00
|
|
|
#:
|
2019-01-30 21:31:56 +00:00
|
|
|
#: Fetch the newest version of Homebrew and all formulae from GitHub using `git`(1) and perform any necessary migrations.
|
2016-08-17 01:19:40 +02:00
|
|
|
#:
|
2019-08-20 00:04:14 -04:00
|
|
|
#: --merge Use `git merge` to apply updates (rather than `git rebase`).
|
2020-07-28 11:49:50 +01:00
|
|
|
#: --preinstall Run on auto-updates (e.g. before `brew install`). Skips some slower steps.
|
2019-02-12 17:10:28 -08:00
|
|
|
#: -f, --force Always do a slower, full update check (even if unnecessary).
|
|
|
|
#: -v, --verbose Print the directories checked and `git` operations performed.
|
|
|
|
#: -d, --debug Display a trace of all shell commands as they are executed.
|
|
|
|
#: -h, --help Show this message.
|
2016-04-08 16:28:43 +02:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
# HOMEBREW_CURLRC, HOMEBREW_DEVELOPER, HOMEBREW_GIT_EMAIL, HOMEBREW_GIT_NAME
|
|
|
|
# HOMEBREW_UPDATE_CLEANUP, HOMEBREW_UPDATE_TO_TAG are from the user environment
|
|
|
|
# HOMEBREW_LIBRARY, HOMEBREW_PREFIX, HOMEBREW_REPOSITORY are set by bin/brew
|
|
|
|
# HOMEBREW_BREW_DEFAULT_GIT_REMOTE, HOMEBREW_BREW_GIT_REMOTE, HOMEBREW_CACHE, HOMEBREW_CELLAR, HOMEBREW_CURL
|
|
|
|
# HOMEBREW_DEV_CMD_RUN, HOMEBREW_FORCE_BREWED_CURL, HOMEBREW_FORCE_BREWED_GIT, HOMEBREW_SYSTEM_CURL_TOO_OLD
|
|
|
|
# HOMEBREW_USER_AGENT_CURL are set by brew.sh
|
|
|
|
# shellcheck disable=SC2154
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/utils/lock.sh"
|
2016-05-10 20:16:25 +08:00
|
|
|
|
2016-07-15 19:33:30 +01:00
|
|
|
# Replaces the function in Library/Homebrew/brew.sh to cache the Git executable to
|
2016-07-07 10:24:37 +01:00
|
|
|
# provide speedup when using Git repeatedly (as update.sh does).
|
|
|
|
git() {
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -z "${GIT_EXECUTABLE}" ]]
|
2016-07-07 10:24:37 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
GIT_EXECUTABLE="$("${HOMEBREW_LIBRARY}/Homebrew/shims/scm/git" --homebrew=print-path)"
|
2016-07-07 10:24:37 +01:00
|
|
|
fi
|
2021-05-06 10:03:16 +09:00
|
|
|
"${GIT_EXECUTABLE}" "$@"
|
2016-07-07 10:24:37 +01:00
|
|
|
}
|
|
|
|
|
2016-01-10 20:28:52 +00:00
|
|
|
git_init_if_necessary() {
|
2021-05-06 10:03:16 +09:00
|
|
|
safe_cd "${HOMEBREW_REPOSITORY}"
|
2016-01-20 19:51:48 +08:00
|
|
|
if [[ ! -d ".git" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
2016-03-09 17:09:38 +08:00
|
|
|
set -e
|
|
|
|
trap '{ rm -rf .git; exit 1; }' EXIT
|
2016-01-28 19:32:41 +08:00
|
|
|
git init
|
2016-01-10 20:28:52 +00:00
|
|
|
git config --bool core.autocrlf false
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ "${HOMEBREW_BREW_DEFAULT_GIT_REMOTE}" != "${HOMEBREW_BREW_GIT_REMOTE}" ]]
|
2020-01-13 09:43:02 +00:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "HOMEBREW_BREW_GIT_REMOTE set: using ${HOMEBREW_BREW_GIT_REMOTE} for Homebrew/brew Git remote URL."
|
2020-01-13 09:43:02 +00:00
|
|
|
fi
|
2021-05-06 10:03:16 +09:00
|
|
|
git config remote.origin.url "${HOMEBREW_BREW_GIT_REMOTE}"
|
2016-01-10 20:28:52 +00:00
|
|
|
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
|
2020-10-09 09:32:38 +01:00
|
|
|
git fetch --force --tags origin
|
2020-06-16 21:55:37 -07:00
|
|
|
git remote set-head origin --auto >/dev/null
|
2016-01-28 17:11:35 +08:00
|
|
|
git reset --hard origin/master
|
2016-07-14 15:39:05 +08:00
|
|
|
SKIP_FETCH_BREW_REPOSITORY=1
|
|
|
|
set +e
|
|
|
|
trap - EXIT
|
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
[[ -d "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core" ]] || return
|
|
|
|
safe_cd "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core"
|
2016-07-14 15:39:05 +08:00
|
|
|
if [[ ! -d ".git" ]]
|
|
|
|
then
|
|
|
|
set -e
|
|
|
|
trap '{ rm -rf .git; exit 1; }' EXIT
|
|
|
|
git init
|
|
|
|
git config --bool core.autocrlf false
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ "${HOMEBREW_CORE_DEFAULT_GIT_REMOTE}" != "${HOMEBREW_CORE_GIT_REMOTE}" ]]
|
2020-01-13 09:43:02 +00:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "HOMEBREW_CORE_GIT_REMOTE set: using ${HOMEBREW_CORE_GIT_REMOTE} for Homebrew/core Git remote URL."
|
2020-01-13 09:43:02 +00:00
|
|
|
fi
|
2021-05-06 10:03:16 +09:00
|
|
|
git config remote.origin.url "${HOMEBREW_CORE_GIT_REMOTE}"
|
2016-07-14 15:39:05 +08:00
|
|
|
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
|
2020-10-09 09:32:38 +01:00
|
|
|
git fetch --force origin refs/heads/master:refs/remotes/origin/master
|
2020-06-16 21:55:37 -07:00
|
|
|
git remote set-head origin --auto >/dev/null
|
2016-07-14 15:39:05 +08:00
|
|
|
git reset --hard origin/master
|
|
|
|
SKIP_FETCH_CORE_REPOSITORY=1
|
2016-03-09 17:09:38 +08:00
|
|
|
set +e
|
|
|
|
trap - EXIT
|
2016-01-10 20:28:52 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
repo_var() {
|
2016-01-21 18:44:32 +08:00
|
|
|
local repo_var
|
|
|
|
|
|
|
|
repo_var="$1"
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${repo_var}" == "${HOMEBREW_REPOSITORY}" ]]
|
2016-01-20 19:41:42 +08:00
|
|
|
then
|
|
|
|
repo_var=""
|
|
|
|
else
|
2021-05-06 10:03:16 +09:00
|
|
|
repo_var="${repo_var#"${HOMEBREW_LIBRARY}/Taps"}"
|
|
|
|
repo_var="$(echo -n "${repo_var}" | tr -C "A-Za-z0-9" "_" | tr "[:lower:]" "[:upper:]")"
|
2016-01-20 19:41:42 +08:00
|
|
|
fi
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "${repo_var}"
|
2016-01-10 20:28:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
upstream_branch() {
|
|
|
|
local upstream_branch
|
2016-01-21 18:44:32 +08:00
|
|
|
|
2016-01-20 20:29:47 +08:00
|
|
|
upstream_branch="$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null)"
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -z "${upstream_branch}" ]]
|
2020-06-16 21:55:37 -07:00
|
|
|
then
|
|
|
|
git remote set-head origin --auto >/dev/null
|
|
|
|
upstream_branch="$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null)"
|
|
|
|
fi
|
2016-01-20 20:29:47 +08:00
|
|
|
upstream_branch="${upstream_branch#refs/remotes/origin/}"
|
2021-05-06 10:03:16 +09:00
|
|
|
[[ -z "${upstream_branch}" ]] && upstream_branch="master"
|
|
|
|
echo "${upstream_branch}"
|
2016-01-10 20:28:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
read_current_revision() {
|
|
|
|
git rev-parse -q --verify HEAD
|
|
|
|
}
|
|
|
|
|
|
|
|
pop_stash() {
|
2021-05-06 10:03:16 +09:00
|
|
|
[[ -z "${STASHED}" ]] && return
|
|
|
|
if [[ -n "${HOMEBREW_VERBOSE}" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "Restoring your stashed changes to ${DIR}..."
|
2016-06-05 06:27:58 -07:00
|
|
|
git stash pop
|
|
|
|
else
|
|
|
|
git stash pop "${QUIET_ARGS[@]}" 1>/dev/null
|
2016-01-10 20:28:52 +00:00
|
|
|
fi
|
|
|
|
unset STASHED
|
|
|
|
}
|
|
|
|
|
|
|
|
pop_stash_message() {
|
2021-05-06 10:03:16 +09:00
|
|
|
[[ -z "${STASHED}" ]] && return
|
|
|
|
echo "To restore the stashed changes to ${DIR}, run:"
|
|
|
|
echo " cd ${DIR} && git stash pop"
|
2016-01-10 20:28:52 +00:00
|
|
|
unset STASHED
|
|
|
|
}
|
|
|
|
|
|
|
|
reset_on_interrupt() {
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ "${INITIAL_BRANCH}" != "${UPSTREAM_BRANCH}" && -n "${INITIAL_BRANCH}" ]]
|
2016-01-20 22:58:45 +08:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
git checkout "${INITIAL_BRANCH}" "${QUIET_ARGS[@]}"
|
2016-01-20 22:58:45 +08:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${INITIAL_REVISION}" ]]
|
2016-01-20 22:58:45 +08:00
|
|
|
then
|
2016-05-03 15:28:00 +01:00
|
|
|
git rebase --abort &>/dev/null
|
|
|
|
git merge --abort &>/dev/null
|
2021-05-06 10:03:16 +09:00
|
|
|
git reset --hard "${INITIAL_REVISION}" "${QUIET_ARGS[@]}"
|
2016-01-20 22:58:45 +08:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_NO_UPDATE_CLEANUP}" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
|
|
|
pop_stash
|
|
|
|
else
|
|
|
|
pop_stash_message
|
|
|
|
fi
|
2016-01-20 22:58:45 +08:00
|
|
|
|
|
|
|
exit 130
|
2016-01-10 20:28:52 +00:00
|
|
|
}
|
|
|
|
|
2019-04-08 12:47:15 -04:00
|
|
|
# Used for testing purposes, e.g. for testing formula migration after
|
2016-08-10 09:33:47 +01:00
|
|
|
# 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"
|
2021-05-06 10:03:16 +09:00
|
|
|
cd "${DIR}" || return
|
2016-08-10 09:33:47 +01:00
|
|
|
TAP_VAR="$2"
|
|
|
|
UPSTREAM_BRANCH="$3"
|
|
|
|
CURRENT_REVISION="$4"
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
INITIAL_REVISION="$(git rev-parse -q --verify "${UPSTREAM_BRANCH}")"
|
|
|
|
export HOMEBREW_UPDATE_BEFORE"${TAP_VAR}"="${INITIAL_REVISION}"
|
|
|
|
export HOMEBREW_UPDATE_AFTER"${TAP_VAR}"="${CURRENT_REVISION}"
|
|
|
|
if [[ "${INITIAL_REVISION}" != "${CURRENT_REVISION}" ]]
|
2016-08-10 09:33:47 +01:00
|
|
|
then
|
|
|
|
HOMEBREW_UPDATED="1"
|
|
|
|
fi
|
2021-05-06 10:03:16 +09:00
|
|
|
if ! git merge-base --is-ancestor "${INITIAL_REVISION}" "${CURRENT_REVISION}"
|
2016-08-10 09:33:47 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
odie "Your ${DIR} HEAD is not a descendant of ${UPSTREAM_BRANCH}!"
|
2016-08-10 09:33:47 +01:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
merge_or_rebase() {
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_VERBOSE}" ]]
|
2016-07-12 19:45:49 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "Updating ${DIR}..."
|
2016-07-12 19:45:49 +01:00
|
|
|
fi
|
|
|
|
|
2016-01-21 18:44:32 +08:00
|
|
|
local DIR
|
|
|
|
local TAP_VAR
|
2016-08-10 09:33:47 +01:00
|
|
|
local UPSTREAM_BRANCH
|
2016-01-21 18:44:32 +08:00
|
|
|
|
|
|
|
DIR="$1"
|
2021-05-06 10:03:16 +09:00
|
|
|
cd "${DIR}" || return
|
2016-08-10 09:33:47 +01:00
|
|
|
TAP_VAR="$2"
|
|
|
|
UPSTREAM_BRANCH="$3"
|
2016-01-10 20:28:52 +00:00
|
|
|
unset STASHED
|
|
|
|
|
2016-01-21 14:01:51 +08:00
|
|
|
trap reset_on_interrupt SIGINT
|
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${DIR}" == "${HOMEBREW_REPOSITORY}" && -n "${HOMEBREW_UPDATE_TO_TAG}" ]]
|
2016-09-17 19:41:21 +01:00
|
|
|
then
|
2021-09-13 20:32:20 +08:00
|
|
|
UPSTREAM_TAG="$(
|
|
|
|
git tag --list |
|
|
|
|
sort --field-separator=. --key=1,1nr -k 2,2nr -k 3,3nr |
|
|
|
|
grep --max-count=1 '^[0-9]*\.[0-9]*\.[0-9]*$'
|
|
|
|
)"
|
2016-09-21 14:32:48 +01:00
|
|
|
else
|
|
|
|
UPSTREAM_TAG=""
|
2016-09-17 19:41:21 +01:00
|
|
|
fi
|
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${UPSTREAM_TAG}" ]]
|
2016-09-17 19:41:21 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
REMOTE_REF="refs/tags/${UPSTREAM_TAG}"
|
2016-09-24 17:25:15 +01:00
|
|
|
UPSTREAM_BRANCH="stable"
|
2016-09-17 19:41:21 +01:00
|
|
|
else
|
2021-05-06 10:03:16 +09:00
|
|
|
REMOTE_REF="origin/${UPSTREAM_BRANCH}"
|
2016-09-17 19:41:21 +01:00
|
|
|
fi
|
2016-09-17 19:36:53 +01:00
|
|
|
|
2016-01-21 14:01:51 +08:00
|
|
|
if [[ -n "$(git status --untracked-files=all --porcelain 2>/dev/null)" ]]
|
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_VERBOSE}" ]]
|
2016-01-21 14:01:51 +08:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "Stashing uncommitted changes to ${DIR}..."
|
2016-01-21 14:01:51 +08:00
|
|
|
fi
|
2016-02-18 10:38:30 +00:00
|
|
|
git merge --abort &>/dev/null
|
2016-05-03 15:28:00 +01:00
|
|
|
git rebase --abort &>/dev/null
|
2016-08-25 11:40:18 +01:00
|
|
|
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
|
2021-05-06 10:03:16 +09:00
|
|
|
Could not 'git stash' in ${DIR}!
|
2016-08-25 11:40:18 +01:00
|
|
|
Please stash/commit manually if you need to keep your changes or, if not, run:
|
2021-05-06 10:03:16 +09:00
|
|
|
cd ${DIR}
|
2016-08-25 11:40:18 +01:00
|
|
|
git reset --hard origin/master
|
|
|
|
EOS
|
|
|
|
fi
|
2016-01-21 18:53:42 +08:00
|
|
|
git reset --hard "${QUIET_ARGS[@]}"
|
2016-01-21 14:01:51 +08:00
|
|
|
STASHED="1"
|
|
|
|
fi
|
|
|
|
|
2016-08-10 09:33:47 +01:00
|
|
|
INITIAL_BRANCH="$(git symbolic-ref --short HEAD 2>/dev/null)"
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${UPSTREAM_TAG}" ]] ||
|
|
|
|
[[ "${INITIAL_BRANCH}" != "${UPSTREAM_BRANCH}" && -n "${INITIAL_BRANCH}" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
2016-03-09 17:35:03 +08:00
|
|
|
# Recreate and check out `#{upstream_branch}` if unable to fast-forward
|
|
|
|
# it to `origin/#{@upstream_branch}`. Otherwise, just check it out.
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -z "${UPSTREAM_TAG}" ]] &&
|
|
|
|
git merge-base --is-ancestor "${UPSTREAM_BRANCH}" "${REMOTE_REF}" &>/dev/null
|
2016-03-09 17:35:03 +08:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
git checkout --force "${UPSTREAM_BRANCH}" "${QUIET_ARGS[@]}"
|
2016-03-09 17:35:03 +08:00
|
|
|
else
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${UPSTREAM_TAG}" && "${UPSTREAM_BRANCH}" != "master" ]]
|
2018-11-25 20:16:13 +00:00
|
|
|
then
|
|
|
|
git checkout --force -B "master" "origin/master" "${QUIET_ARGS[@]}"
|
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
git checkout --force -B "${UPSTREAM_BRANCH}" "${REMOTE_REF}" "${QUIET_ARGS[@]}"
|
2016-03-09 17:35:03 +08:00
|
|
|
fi
|
2016-01-10 20:28:52 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
INITIAL_REVISION="$(read_current_revision)"
|
2021-05-06 10:03:16 +09:00
|
|
|
export HOMEBREW_UPDATE_BEFORE"${TAP_VAR}"="${INITIAL_REVISION}"
|
2016-01-10 20:28:52 +00:00
|
|
|
|
|
|
|
# ensure we don't munge line endings on checkout
|
|
|
|
git config core.autocrlf false
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -z "${HOMEBREW_MERGE}" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
2020-04-03 08:59:11 +01:00
|
|
|
# Work around bug where git rebase --quiet is not quiet
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -z "${HOMEBREW_VERBOSE}" ]]
|
2020-04-03 08:59:11 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
git rebase "${QUIET_ARGS[@]}" "${REMOTE_REF}" >/dev/null
|
2020-04-03 08:59:11 +01:00
|
|
|
else
|
2021-05-06 10:03:16 +09:00
|
|
|
git rebase "${QUIET_ARGS[@]}" "${REMOTE_REF}"
|
2020-04-03 08:59:11 +01:00
|
|
|
fi
|
2016-01-10 20:28:52 +00:00
|
|
|
else
|
2021-05-06 10:03:16 +09:00
|
|
|
git merge --no-edit --ff "${QUIET_ARGS[@]}" "${REMOTE_REF}" \
|
2016-02-18 10:38:30 +00:00
|
|
|
--strategy=recursive \
|
|
|
|
--strategy-option=ours \
|
|
|
|
--strategy-option=ignore-all-space
|
2016-01-10 20:28:52 +00:00
|
|
|
fi
|
|
|
|
|
2016-05-03 14:24:41 +01:00
|
|
|
CURRENT_REVISION="$(read_current_revision)"
|
2021-05-06 10:03:16 +09:00
|
|
|
export HOMEBREW_UPDATE_AFTER"${TAP_VAR}"="${CURRENT_REVISION}"
|
2016-05-03 14:24:41 +01:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ "${INITIAL_REVISION}" != "${CURRENT_REVISION}" ]]
|
2016-05-03 14:24:41 +01:00
|
|
|
then
|
|
|
|
HOMEBREW_UPDATED="1"
|
|
|
|
fi
|
2016-01-10 20:28:52 +00:00
|
|
|
|
2016-01-20 22:58:45 +08:00
|
|
|
trap '' SIGINT
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_NO_UPDATE_CLEANUP}" ]]
|
2016-04-11 09:31:50 +01:00
|
|
|
then
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${INITIAL_BRANCH}" != "${UPSTREAM_BRANCH}" && -n "${INITIAL_BRANCH}" ]] &&
|
|
|
|
[[ ! "${INITIAL_BRANCH}" =~ ^v[0-9]+\.[0-9]+\.[0-9]|stable$ ]]
|
2016-06-03 14:12:36 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
git checkout "${INITIAL_BRANCH}" "${QUIET_ARGS[@]}"
|
2016-06-03 14:12:36 +01:00
|
|
|
fi
|
|
|
|
|
2016-04-11 09:31:50 +01:00
|
|
|
pop_stash
|
|
|
|
else
|
|
|
|
pop_stash_message
|
|
|
|
fi
|
2016-01-20 22:58:45 +08:00
|
|
|
|
|
|
|
trap - SIGINT
|
2016-01-10 20:28:52 +00:00
|
|
|
}
|
|
|
|
|
2016-02-12 13:25:37 +00:00
|
|
|
homebrew-update() {
|
2016-01-21 18:44:32 +08:00
|
|
|
local option
|
|
|
|
local DIR
|
|
|
|
local UPSTREAM_BRANCH
|
|
|
|
|
|
|
|
for option in "$@"
|
2016-01-10 20:28:52 +00:00
|
|
|
do
|
2021-05-06 10:03:16 +09:00
|
|
|
case "${option}" in
|
2021-09-13 20:32:20 +08:00
|
|
|
-\? | -h | --help | --usage) brew help update; exit $? ;;
|
2016-08-07 12:51:12 +02:00
|
|
|
--verbose) HOMEBREW_VERBOSE=1 ;;
|
|
|
|
--debug) HOMEBREW_DEBUG=1 ;;
|
2021-03-12 19:38:08 -08:00
|
|
|
--quiet) HOMEBREW_QUIET=1 ;;
|
2016-08-07 12:51:12 +02:00
|
|
|
--merge) HOMEBREW_MERGE=1 ;;
|
2016-08-12 14:22:00 +01:00
|
|
|
--force) HOMEBREW_UPDATE_FORCE=1 ;;
|
2016-01-10 20:28:52 +00:00
|
|
|
--simulate-from-current-branch) HOMEBREW_SIMULATE_FROM_CURRENT_BRANCH=1 ;;
|
2016-08-07 12:51:12 +02:00
|
|
|
--preinstall) export HOMEBREW_UPDATE_PREINSTALL=1 ;;
|
|
|
|
--*) ;;
|
2016-01-21 18:36:05 +08:00
|
|
|
-*)
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ "${option}" == *v* ]] && HOMEBREW_VERBOSE=1
|
|
|
|
[[ "${option}" == *q* ]] && HOMEBREW_QUIET=1
|
|
|
|
[[ "${option}" == *d* ]] && HOMEBREW_DEBUG=1
|
|
|
|
[[ "${option}" == *f* ]] && HOMEBREW_UPDATE_FORCE=1
|
2016-01-21 18:36:05 +08:00
|
|
|
;;
|
2016-01-10 20:28:52 +00:00
|
|
|
*)
|
2016-08-07 12:51:12 +02:00
|
|
|
odie <<EOS
|
2016-01-20 20:26:28 +08:00
|
|
|
This command updates brew itself, and does not take formula names.
|
2019-12-13 15:39:55 -05:00
|
|
|
Use \`brew upgrade $@\` instead.
|
2016-01-20 20:26:28 +08:00
|
|
|
EOS
|
2016-01-10 20:28:52 +00:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_DEBUG}" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
|
|
|
set -x
|
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -z "${HOMEBREW_UPDATE_CLEANUP}" && -z "${HOMEBREW_UPDATE_TO_TAG}" ]]
|
2016-09-08 20:44:18 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_DEVELOPER}" || -n "${HOMEBREW_DEV_CMD_RUN}" ]]
|
2016-09-08 20:44:18 +01:00
|
|
|
then
|
|
|
|
export HOMEBREW_NO_UPDATE_CLEANUP="1"
|
2016-09-25 21:53:28 +01:00
|
|
|
else
|
|
|
|
export HOMEBREW_UPDATE_TO_TAG="1"
|
2016-09-08 20:44:18 +01:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2016-01-10 20:28:52 +00:00
|
|
|
# check permissions
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -e "${HOMEBREW_CELLAR}" && ! -w "${HOMEBREW_CELLAR}" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
2016-08-07 12:51:12 +02:00
|
|
|
odie <<EOS
|
2021-05-06 10:03:16 +09:00
|
|
|
${HOMEBREW_CELLAR} is not writable. You should change the
|
|
|
|
ownership and permissions of ${HOMEBREW_CELLAR} back to your
|
2016-09-09 08:06:37 +01:00
|
|
|
user account:
|
2021-05-06 10:03:16 +09:00
|
|
|
sudo chown -R \$(whoami) ${HOMEBREW_CELLAR}
|
2016-07-10 01:30:29 +01:00
|
|
|
EOS
|
2016-01-10 20:28:52 +00:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ ! -w "${HOMEBREW_REPOSITORY}" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
2016-08-07 12:51:12 +02:00
|
|
|
odie <<EOS
|
2021-05-06 10:03:16 +09:00
|
|
|
${HOMEBREW_REPOSITORY} is not writable. You should change the
|
|
|
|
ownership and permissions of ${HOMEBREW_REPOSITORY} back to your
|
2016-07-10 01:30:29 +01:00
|
|
|
user account:
|
2021-05-06 10:03:16 +09:00
|
|
|
sudo chown -R \$(whoami) ${HOMEBREW_REPOSITORY}
|
2016-07-10 01:30:29 +01:00
|
|
|
EOS
|
2016-01-10 20:28:52 +00:00
|
|
|
fi
|
|
|
|
|
2020-11-25 12:54:18 -06:00
|
|
|
# we may want to use a Homebrew curl
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${HOMEBREW_FORCE_BREWED_CURL}" && ! -x "${HOMEBREW_PREFIX}/opt/curl/bin/curl" ]]
|
2017-11-26 18:17:25 +00:00
|
|
|
then
|
2020-11-25 12:54:18 -06:00
|
|
|
# we cannot install a Homebrew cURL if homebrew/core is unavailable.
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ ! -d "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core" ]] || ! brew install curl
|
2020-11-24 20:59:46 -06:00
|
|
|
then
|
2020-07-29 17:31:11 -04:00
|
|
|
odie "'curl' must be installed and in your PATH!"
|
2020-11-24 20:59:46 -06:00
|
|
|
fi
|
2017-11-26 18:17:25 +00:00
|
|
|
fi
|
|
|
|
|
2018-02-27 10:41:16 +00:00
|
|
|
if ! git --version &>/dev/null ||
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ -n "${HOMEBREW_FORCE_BREWED_GIT}" && ! -x "${HOMEBREW_PREFIX}/opt/git/bin/git" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
2020-11-25 12:54:18 -06:00
|
|
|
# we cannot install a Homebrew Git if homebrew/core is unavailable.
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ ! -d "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core" ]] || ! brew install git
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
2020-07-29 17:31:11 -04:00
|
|
|
odie "'git' must be installed and in your PATH!"
|
2016-01-10 20:28:52 +00:00
|
|
|
fi
|
|
|
|
fi
|
2020-11-24 20:59:46 -06:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
[[ -f "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core/.git/shallow" ]] && HOMEBREW_CORE_SHALLOW=1
|
|
|
|
[[ -f "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-cask/.git/shallow" ]] && HOMEBREW_CASK_SHALLOW=1
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${HOMEBREW_CORE_SHALLOW}" && -n "${HOMEBREW_CASK_SHALLOW}" ]]
|
2020-12-28 17:04:38 -05:00
|
|
|
then
|
|
|
|
SHALLOW_COMMAND_PHRASE="These commands"
|
|
|
|
SHALLOW_REPO_PHRASE="repositories"
|
|
|
|
else
|
|
|
|
SHALLOW_COMMAND_PHRASE="This command"
|
|
|
|
SHALLOW_REPO_PHRASE="repository"
|
|
|
|
fi
|
2020-12-03 08:42:09 +00:00
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${HOMEBREW_CORE_SHALLOW}" || -n "${HOMEBREW_CASK_SHALLOW}" ]]
|
2020-12-03 08:42:09 +00:00
|
|
|
then
|
|
|
|
odie <<EOS
|
2020-12-11 19:27:54 -05:00
|
|
|
${HOMEBREW_CORE_SHALLOW:+
|
|
|
|
homebrew-core is a shallow clone.}${HOMEBREW_CASK_SHALLOW:+
|
|
|
|
homebrew-cask is a shallow clone.}
|
|
|
|
To \`brew update\`, first run:${HOMEBREW_CORE_SHALLOW:+
|
2021-05-06 10:03:16 +09:00
|
|
|
git -C "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core" fetch --unshallow}${HOMEBREW_CASK_SHALLOW:+
|
|
|
|
git -C "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-cask" fetch --unshallow}
|
2020-12-28 17:04:38 -05:00
|
|
|
${SHALLOW_COMMAND_PHRASE} may take a few minutes to run due to the large size of the ${SHALLOW_REPO_PHRASE}.
|
2020-12-11 19:27:54 -05:00
|
|
|
This restriction has been made on GitHub's request because updating shallow
|
|
|
|
clones is an extremely expensive operation due to the tree layout and traffic of
|
|
|
|
Homebrew/homebrew-core and Homebrew/homebrew-cask. We don't do this for you
|
|
|
|
automatically to avoid repeatedly performing an expensive unshallow operation in
|
|
|
|
CI systems (which should instead be fixed to not use shallow clones). Sorry for
|
|
|
|
the inconvenience!
|
2020-12-03 08:42:09 +00:00
|
|
|
EOS
|
|
|
|
fi
|
|
|
|
|
2016-02-12 12:54:47 +00:00
|
|
|
export GIT_TERMINAL_PROMPT="0"
|
|
|
|
export GIT_SSH_COMMAND="ssh -oBatchMode=yes"
|
2016-01-10 20:28:52 +00:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_GIT_NAME}" ]]
|
2020-02-12 20:00:14 +00:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
export GIT_AUTHOR_NAME="${HOMEBREW_GIT_NAME}"
|
|
|
|
export GIT_COMMITTER_NAME="${HOMEBREW_GIT_NAME}"
|
2020-02-12 20:00:14 +00:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_GIT_EMAIL}" ]]
|
2020-02-12 20:00:14 +00:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
export GIT_AUTHOR_EMAIL="${HOMEBREW_GIT_EMAIL}"
|
|
|
|
export GIT_COMMITTER_EMAIL="${HOMEBREW_GIT_EMAIL}"
|
2020-02-12 20:00:14 +00:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -z "${HOMEBREW_VERBOSE}" ]]
|
2016-01-10 20:28:52 +00:00
|
|
|
then
|
2016-01-21 18:53:42 +08:00
|
|
|
QUIET_ARGS=(-q)
|
|
|
|
else
|
|
|
|
QUIET_ARGS=()
|
2016-01-10 20:28:52 +00:00
|
|
|
fi
|
|
|
|
|
2021-05-18 17:10:20 +05:30
|
|
|
# HOMEBREW_CURLRC isn't misspelt here
|
|
|
|
# shellcheck disable=SC2153
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -z "${HOMEBREW_CURLRC}" ]]
|
2018-09-14 18:50:21 +08:00
|
|
|
then
|
|
|
|
CURL_DISABLE_CURLRC_ARGS=(-q)
|
|
|
|
else
|
|
|
|
CURL_DISABLE_CURLRC_ARGS=()
|
|
|
|
fi
|
|
|
|
|
2016-05-10 20:16:25 +08:00
|
|
|
# only allow one instance of brew update
|
|
|
|
lock update
|
|
|
|
|
2016-01-10 20:28:52 +00:00
|
|
|
git_init_if_necessary
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ "${HOMEBREW_BREW_DEFAULT_GIT_REMOTE}" != "${HOMEBREW_BREW_GIT_REMOTE}" ]]
|
2019-12-03 00:45:11 +09:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
safe_cd "${HOMEBREW_REPOSITORY}"
|
|
|
|
echo "HOMEBREW_BREW_GIT_REMOTE set: using ${HOMEBREW_BREW_GIT_REMOTE} for Homebrew/brew Git remote."
|
|
|
|
git remote set-url origin "${HOMEBREW_BREW_GIT_REMOTE}"
|
2019-12-03 00:45:11 +09:00
|
|
|
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
|
2020-10-09 09:32:38 +01:00
|
|
|
git fetch --force --tags origin
|
2019-12-03 00:45:11 +09:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ "${HOMEBREW_CORE_DEFAULT_GIT_REMOTE}" != "${HOMEBREW_CORE_GIT_REMOTE}" ]] &&
|
|
|
|
[[ -d "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core" ]]
|
2019-12-03 00:45:11 +09:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
safe_cd "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core"
|
2021-07-14 00:52:15 -04:00
|
|
|
echo "HOMEBREW_CORE_GIT_REMOTE set: using ${HOMEBREW_CORE_GIT_REMOTE} for Homebrew/core Git remote."
|
2021-05-06 10:03:16 +09:00
|
|
|
git remote set-url origin "${HOMEBREW_CORE_GIT_REMOTE}"
|
2019-12-03 00:45:11 +09:00
|
|
|
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
|
2020-10-09 09:32:38 +01:00
|
|
|
git fetch --force origin refs/heads/master:refs/remotes/origin/master
|
2019-12-03 00:45:11 +09:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
safe_cd "${HOMEBREW_REPOSITORY}"
|
2016-07-14 15:39:05 +08:00
|
|
|
|
2018-11-14 13:32:41 -05:00
|
|
|
# if an older system had a newer curl installed, change each repo's remote URL from GIT to HTTPS
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${HOMEBREW_SYSTEM_CURL_TOO_OLD}" && -x "${HOMEBREW_PREFIX}/opt/curl/bin/curl" ]] &&
|
|
|
|
[[ "$(git config remote.origin.url)" =~ ^git:// ]]
|
2018-11-14 13:32:41 -05:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
git config remote.origin.url "${HOMEBREW_BREW_GIT_REMOTE}"
|
|
|
|
git config -f "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core/.git/config" remote.origin.url "${HOMEBREW_CORE_GIT_REMOTE}"
|
2018-11-14 13:32:41 -05:00
|
|
|
fi
|
|
|
|
|
2016-01-21 13:32:22 +08:00
|
|
|
# kill all of subprocess on interrupt
|
2016-12-01 20:59:41 +01:00
|
|
|
trap '{ /usr/bin/pkill -P $$; wait; exit 130; }' SIGINT
|
2016-01-21 13:32:22 +08:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
local update_failed_file="${HOMEBREW_REPOSITORY}/.git/UPDATE_FAILED"
|
|
|
|
local missing_remote_ref_dirs_file="${HOMEBREW_REPOSITORY}/.git/FAILED_FETCH_DIRS"
|
|
|
|
rm -f "${update_failed_file}"
|
|
|
|
rm -f "${missing_remote_ref_dirs_file}"
|
2016-05-03 14:24:41 +01:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
for DIR in "${HOMEBREW_REPOSITORY}" "${HOMEBREW_LIBRARY}"/Taps/*/*
|
2016-01-10 20:28:52 +00:00
|
|
|
do
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${HOMEBREW_INSTALL_FROM_API}" ]] &&
|
|
|
|
[[ -n "${HOMEBREW_UPDATE_PREINSTALL}" ]] &&
|
|
|
|
[[ "${DIR}" == "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core" ]]
|
2021-07-14 00:52:15 -04:00
|
|
|
then
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
[[ -d "${DIR}/.git" ]] || continue
|
|
|
|
cd "${DIR}" || continue
|
2016-08-10 09:33:47 +01:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_VERBOSE}" ]]
|
2016-08-11 10:57:08 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "Checking if we need to fetch ${DIR}..."
|
2016-08-11 10:57:08 +01:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
TAP_VAR="$(repo_var "${DIR}")"
|
2016-08-11 17:22:27 +01:00
|
|
|
UPSTREAM_BRANCH_DIR="$(upstream_branch)"
|
2021-05-06 10:03:16 +09:00
|
|
|
declare UPSTREAM_BRANCH"${TAP_VAR}"="${UPSTREAM_BRANCH_DIR}"
|
|
|
|
declare PREFETCH_REVISION"${TAP_VAR}"="$(git rev-parse -q --verify refs/remotes/origin/"${UPSTREAM_BRANCH_DIR}")"
|
2016-08-10 09:33:47 +01:00
|
|
|
|
2016-09-20 17:15:43 +01:00
|
|
|
# Force a full update if we don't have any tags.
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${DIR}" == "${HOMEBREW_REPOSITORY}" && -z "$(git tag --list)" ]]
|
2016-09-20 17:15:43 +01:00
|
|
|
then
|
|
|
|
HOMEBREW_UPDATE_FORCE=1
|
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -z "${HOMEBREW_UPDATE_FORCE}" ]]
|
2016-08-12 14:22:00 +01:00
|
|
|
then
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ -n "${SKIP_FETCH_BREW_REPOSITORY}" && "${DIR}" == "${HOMEBREW_REPOSITORY}" ]] && continue
|
|
|
|
[[ -n "${SKIP_FETCH_CORE_REPOSITORY}" && "${DIR}" == "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core" ]] && continue
|
2016-08-12 14:22:00 +01:00
|
|
|
fi
|
2016-08-10 09:33:47 +01:00
|
|
|
|
|
|
|
# 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".
|
2016-01-10 20:28:52 +00:00
|
|
|
# the refspec ensures that the default upstream branch gets updated
|
2016-02-12 13:09:13 +00:00
|
|
|
(
|
2016-02-18 10:41:09 +00:00
|
|
|
UPSTREAM_REPOSITORY_URL="$(git config remote.origin.url)"
|
2021-04-22 13:18:44 +01:00
|
|
|
|
|
|
|
# HOMEBREW_UPDATE_FORCE and HOMEBREW_UPDATE_PREINSTALL aren't modified here so ignore subshell warning.
|
|
|
|
# shellcheck disable=SC2030
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${UPSTREAM_REPOSITORY_URL}" == "https://github.com/"* ]]
|
2016-02-18 10:41:09 +00:00
|
|
|
then
|
|
|
|
UPSTREAM_REPOSITORY="${UPSTREAM_REPOSITORY_URL#https://github.com/}"
|
|
|
|
UPSTREAM_REPOSITORY="${UPSTREAM_REPOSITORY%.git}"
|
2016-09-24 20:42:55 +01:00
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${DIR}" == "${HOMEBREW_REPOSITORY}" && -n "${HOMEBREW_UPDATE_TO_TAG}" ]]
|
2016-09-24 20:42:55 +01:00
|
|
|
then
|
|
|
|
# Only try to `git fetch` when the upstream tags have changed
|
|
|
|
# (so the API does not return 304: unmodified).
|
2016-09-27 13:54:49 +01:00
|
|
|
GITHUB_API_ETAG="$(sed -n 's/^ETag: "\([a-f0-9]\{32\}\)".*/\1/p' ".git/GITHUB_HEADERS" 2>/dev/null)"
|
2016-09-24 20:42:55 +01:00
|
|
|
GITHUB_API_ACCEPT="application/vnd.github.v3+json"
|
|
|
|
GITHUB_API_ENDPOINT="tags"
|
|
|
|
else
|
|
|
|
# Only try to `git fetch` when the upstream branch is at a different SHA
|
|
|
|
# (so the API does not return 304: unmodified).
|
2021-05-06 10:03:16 +09:00
|
|
|
GITHUB_API_ETAG="$(git rev-parse "refs/remotes/origin/${UPSTREAM_BRANCH_DIR}")"
|
2016-09-24 20:42:55 +01:00
|
|
|
GITHUB_API_ACCEPT="application/vnd.github.v3.sha"
|
2021-05-06 10:03:16 +09:00
|
|
|
GITHUB_API_ENDPOINT="commits/${UPSTREAM_BRANCH_DIR}"
|
2016-09-24 20:42:55 +01:00
|
|
|
fi
|
|
|
|
|
2021-04-22 13:18:44 +01:00
|
|
|
# HOMEBREW_CURL is set by brew.sh (and isn't mispelt here)
|
|
|
|
# shellcheck disable=SC2153
|
2021-09-13 20:32:20 +08:00
|
|
|
UPSTREAM_SHA_HTTP_CODE="$(
|
|
|
|
"${HOMEBREW_CURL}" \
|
|
|
|
"${CURL_DISABLE_CURLRC_ARGS[@]}" \
|
|
|
|
--silent --max-time 3 \
|
|
|
|
--location --no-remote-time --output /dev/null --write-out "%{http_code}" \
|
|
|
|
--dump-header "${DIR}/.git/GITHUB_HEADERS" \
|
|
|
|
--user-agent "${HOMEBREW_USER_AGENT_CURL}" \
|
|
|
|
--header "Accept: ${GITHUB_API_ACCEPT}" \
|
|
|
|
--header "If-None-Match: \"${GITHUB_API_ETAG}\"" \
|
|
|
|
"https://api.github.com/repos/${UPSTREAM_REPOSITORY}/${GITHUB_API_ENDPOINT}"
|
|
|
|
)"
|
2016-09-24 20:42:55 +01:00
|
|
|
|
2016-08-09 09:19:51 +01:00
|
|
|
# Touch FETCH_HEAD to confirm we've checked for an update.
|
2021-05-06 10:03:16 +09:00
|
|
|
[[ -f "${DIR}/.git/FETCH_HEAD" ]] && touch "${DIR}/.git/FETCH_HEAD"
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ -z "${HOMEBREW_UPDATE_FORCE}" ]] && [[ "${UPSTREAM_SHA_HTTP_CODE}" == "304" ]] && exit
|
2021-05-06 10:03:16 +09:00
|
|
|
elif [[ -n "${HOMEBREW_UPDATE_PREINSTALL}" ]]
|
2016-04-11 09:31:50 +01:00
|
|
|
then
|
2018-04-12 16:14:02 -07:00
|
|
|
FORCE_AUTO_UPDATE="$(git config homebrew.forceautoupdate 2>/dev/null || echo "false")"
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ "${FORCE_AUTO_UPDATE}" != "true" ]]
|
2018-04-12 16:14:02 -07:00
|
|
|
then
|
|
|
|
# Don't try to do a `git fetch` that may take longer than expected.
|
|
|
|
exit
|
|
|
|
fi
|
2016-02-18 10:41:09 +00:00
|
|
|
fi
|
|
|
|
|
2021-04-22 13:18:44 +01:00
|
|
|
# HOMEBREW_VERBOSE isn't modified here so ignore subshell warning.
|
|
|
|
# shellcheck disable=SC2030
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_VERBOSE}" ]]
|
2016-07-07 10:24:37 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "Fetching ${DIR}..."
|
2016-07-07 10:24:37 +01:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
local tmp_failure_file="${HOMEBREW_REPOSITORY}/.git/TMP_FETCH_FAILURES"
|
|
|
|
rm -f "${tmp_failure_file}"
|
2021-01-28 01:51:40 -05:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_UPDATE_PREINSTALL}" ]]
|
2016-04-11 09:31:50 +01:00
|
|
|
then
|
2016-09-17 19:35:07 +01:00
|
|
|
git fetch --tags --force "${QUIET_ARGS[@]}" origin \
|
2021-05-06 10:03:16 +09:00
|
|
|
"refs/heads/${UPSTREAM_BRANCH_DIR}:refs/remotes/origin/${UPSTREAM_BRANCH_DIR}" 2>/dev/null
|
2016-04-11 09:31:50 +01:00
|
|
|
else
|
2021-01-28 01:51:40 -05:00
|
|
|
# Capture stderr to tmp_failure_file
|
2016-09-17 19:35:07 +01:00
|
|
|
if ! git fetch --tags --force "${QUIET_ARGS[@]}" origin \
|
2021-05-06 10:03:16 +09:00
|
|
|
"refs/heads/${UPSTREAM_BRANCH_DIR}:refs/remotes/origin/${UPSTREAM_BRANCH_DIR}" 2>>"${tmp_failure_file}"
|
2016-05-03 14:24:41 +01:00
|
|
|
then
|
2021-01-28 01:51:40 -05:00
|
|
|
# Reprint fetch errors to stderr
|
2021-05-06 10:03:16 +09:00
|
|
|
[[ -f "${tmp_failure_file}" ]] && cat "${tmp_failure_file}" 1>&2
|
2021-01-28 01:51:40 -05:00
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${UPSTREAM_SHA_HTTP_CODE}" == "404" ]]
|
2019-02-16 19:57:56 +00:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
TAP="${DIR#${HOMEBREW_LIBRARY}/Taps/}"
|
|
|
|
echo "${TAP} does not exist! Run \`brew untap ${TAP}\` to remove it." >>"${update_failed_file}"
|
2019-02-16 19:57:56 +00:00
|
|
|
else
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "Fetching ${DIR} failed!" >>"${update_failed_file}"
|
2021-01-28 01:51:40 -05:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -f "${tmp_failure_file}" ]] &&
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ "$(cat "${tmp_failure_file}")" == "fatal: couldn't find remote ref refs/heads/${UPSTREAM_BRANCH_DIR}" ]]
|
2021-01-28 01:51:40 -05:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
echo "${DIR}" >>"${missing_remote_ref_dirs_file}"
|
2021-01-28 01:51:40 -05:00
|
|
|
fi
|
2019-02-16 19:57:56 +00:00
|
|
|
fi
|
2016-05-03 14:24:41 +01:00
|
|
|
fi
|
2016-04-11 09:31:50 +01:00
|
|
|
fi
|
2021-01-28 01:51:40 -05:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
rm -f "${tmp_failure_file}"
|
2016-02-12 13:09:13 +00:00
|
|
|
) &
|
2016-01-10 20:28:52 +00:00
|
|
|
done
|
|
|
|
|
|
|
|
wait
|
2016-01-21 13:32:22 +08:00
|
|
|
trap - SIGINT
|
2016-01-10 20:28:52 +00:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -f "${update_failed_file}" ]]
|
2016-05-03 14:24:41 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
onoe <"${update_failed_file}"
|
|
|
|
rm -f "${update_failed_file}"
|
2016-05-03 14:24:41 +01:00
|
|
|
export HOMEBREW_UPDATE_FAILED="1"
|
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -f "${missing_remote_ref_dirs_file}" ]]
|
2021-01-28 01:51:40 -05:00
|
|
|
then
|
2021-09-13 20:32:20 +08:00
|
|
|
HOMEBREW_MISSING_REMOTE_REF_DIRS="$(cat "${missing_remote_ref_dirs_file}")"
|
2021-05-06 10:03:16 +09:00
|
|
|
rm -f "${missing_remote_ref_dirs_file}"
|
2021-01-28 09:10:07 -05:00
|
|
|
export HOMEBREW_MISSING_REMOTE_REF_DIRS
|
2021-01-28 01:51:40 -05:00
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
for DIR in "${HOMEBREW_REPOSITORY}" "${HOMEBREW_LIBRARY}"/Taps/*/*
|
2016-01-10 20:28:52 +00:00
|
|
|
do
|
2021-07-14 00:52:15 -04:00
|
|
|
# HOMEBREW_UPDATE_PREINSTALL wasn't modified in subshell.
|
|
|
|
# shellcheck disable=SC2031
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${HOMEBREW_INSTALL_FROM_API}" ]] &&
|
|
|
|
[[ -n "${HOMEBREW_UPDATE_PREINSTALL}" ]] &&
|
|
|
|
[[ "${DIR}" == "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core" || \
|
|
|
|
"${DIR}" == "${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-cask" ]]
|
2021-07-14 00:52:15 -04:00
|
|
|
then
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
[[ -d "${DIR}/.git" ]] || continue
|
|
|
|
cd "${DIR}" || continue
|
2016-08-10 09:33:47 +01:00
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
TAP_VAR="$(repo_var "${DIR}")"
|
|
|
|
UPSTREAM_BRANCH_VAR="UPSTREAM_BRANCH${TAP_VAR}"
|
2016-08-10 09:33:47 +01:00
|
|
|
UPSTREAM_BRANCH="${!UPSTREAM_BRANCH_VAR}"
|
|
|
|
CURRENT_REVISION="$(read_current_revision)"
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
PREFETCH_REVISION_VAR="PREFETCH_REVISION${TAP_VAR}"
|
2016-08-10 09:33:47 +01:00
|
|
|
PREFETCH_REVISION="${!PREFETCH_REVISION_VAR}"
|
2021-05-06 10:03:16 +09:00
|
|
|
POSTFETCH_REVISION="$(git rev-parse -q --verify refs/remotes/origin/"${UPSTREAM_BRANCH}")"
|
2016-08-10 09:33:47 +01:00
|
|
|
|
2021-04-22 13:18:44 +01:00
|
|
|
# HOMEBREW_UPDATE_FORCE and HOMEBREW_VERBOSE weren't modified in subshell.
|
|
|
|
# shellcheck disable=SC2031
|
2021-05-06 10:03:16 +09:00
|
|
|
if [[ -n "${HOMEBREW_SIMULATE_FROM_CURRENT_BRANCH}" ]]
|
2016-08-10 09:33:47 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
simulate_from_current_branch "${DIR}" "${TAP_VAR}" "${UPSTREAM_BRANCH}" "${CURRENT_REVISION}"
|
|
|
|
elif [[ -z "${HOMEBREW_UPDATE_FORCE}" ]] &&
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ "${PREFETCH_REVISION}" == "${POSTFETCH_REVISION}" ]] &&
|
|
|
|
[[ "${CURRENT_REVISION}" == "${POSTFETCH_REVISION}" ]]
|
2016-08-10 09:33:47 +01:00
|
|
|
then
|
2021-05-06 10:03:16 +09:00
|
|
|
export HOMEBREW_UPDATE_BEFORE"${TAP_VAR}"="${CURRENT_REVISION}"
|
|
|
|
export HOMEBREW_UPDATE_AFTER"${TAP_VAR}"="${CURRENT_REVISION}"
|
2016-08-10 09:33:47 +01:00
|
|
|
else
|
2021-05-06 10:03:16 +09:00
|
|
|
merge_or_rebase "${DIR}" "${TAP_VAR}" "${UPSTREAM_BRANCH}"
|
|
|
|
[[ -n "${HOMEBREW_VERBOSE}" ]] && echo
|
2016-08-10 09:33:47 +01:00
|
|
|
fi
|
2016-01-10 20:28:52 +00:00
|
|
|
done
|
|
|
|
|
2021-05-06 10:03:16 +09:00
|
|
|
safe_cd "${HOMEBREW_REPOSITORY}"
|
2016-05-03 14:24:41 +01:00
|
|
|
|
2021-04-22 13:18:44 +01:00
|
|
|
# HOMEBREW_UPDATE_PREINSTALL wasn't modified in subshell.
|
|
|
|
# shellcheck disable=SC2031
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${HOMEBREW_UPDATED}" ]] ||
|
|
|
|
[[ -n "${HOMEBREW_UPDATE_FAILED}" ]] ||
|
|
|
|
[[ -n "${HOMEBREW_MISSING_REMOTE_REF_DIRS}" ]] ||
|
|
|
|
[[ -n "${HOMEBREW_UPDATE_FORCE}" ]] ||
|
|
|
|
[[ -d "${HOMEBREW_LIBRARY}/LinkedKegs" ]] ||
|
|
|
|
[[ ! -f "${HOMEBREW_CACHE}/all_commands_list.txt" ]] ||
|
|
|
|
[[ -n "${HOMEBREW_DEVELOPER}" && -z "${HOMEBREW_UPDATE_PREINSTALL}" ]]
|
2016-05-03 14:24:41 +01:00
|
|
|
then
|
|
|
|
brew update-report "$@"
|
|
|
|
return $?
|
2021-09-13 20:32:20 +08:00
|
|
|
elif [[ -z "${HOMEBREW_UPDATE_PREINSTALL}" && -z "${HOMEBREW_QUIET}" ]]
|
2016-05-03 14:24:41 +01:00
|
|
|
then
|
|
|
|
echo "Already up-to-date."
|
|
|
|
fi
|
2016-01-10 20:28:52 +00:00
|
|
|
}
|