summaryrefslogtreecommitdiff
path: root/tools/check_for_upgrade.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/check_for_upgrade.sh')
-rw-r--r--tools/check_for_upgrade.sh29
1 files changed, 19 insertions, 10 deletions
diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh
index a36aecb84..d3ad7582c 100644
--- a/tools/check_for_upgrade.sh
+++ b/tools/check_for_upgrade.sh
@@ -36,11 +36,11 @@ function current_epoch() {
function is_update_available() {
local branch
- branch=${"$(cd -q "$ZSH"; git config --local oh-my-zsh.branch)":-master}
+ branch=${"$(builtin cd -q "$ZSH"; git config --local oh-my-zsh.branch)":-master}
local remote remote_url remote_repo
- remote=${"$(cd -q "$ZSH"; git config --local oh-my-zsh.remote)":-origin}
- remote_url=$(cd -q "$ZSH"; git config remote.$remote.url)
+ remote=${"$(builtin cd -q "$ZSH"; git config --local oh-my-zsh.remote)":-origin}
+ remote_url=$(builtin cd -q "$ZSH"; git config remote.$remote.url)
local repo
case "$remote_url" in
@@ -58,25 +58,34 @@ function is_update_available() {
# Get local HEAD. If this fails assume there are updates
local local_head
- local_head=$(cd -q "$ZSH"; git rev-parse $branch 2>/dev/null) || return 0
+ local_head=$(builtin cd -q "$ZSH"; git rev-parse $branch 2>/dev/null) || return 0
# Get remote HEAD. If no suitable command is found assume there are updates
# On any other error, skip the update (connection may be down)
local remote_head
remote_head=$(
if (( ${+commands[curl]} )); then
- curl -fsSL -H 'Accept: application/vnd.github.v3.sha' $api_url 2>/dev/null
+ curl -m 2 -fsSL -H 'Accept: application/vnd.github.v3.sha' $api_url 2>/dev/null
elif (( ${+commands[wget]} )); then
- wget -O- --header='Accept: application/vnd.github.v3.sha' $api_url 2>/dev/null
+ wget -T 2 -O- --header='Accept: application/vnd.github.v3.sha' $api_url 2>/dev/null
elif (( ${+commands[fetch]} )); then
- HTTP_ACCEPT='Accept: application/vnd.github.v3.sha' fetch -o - $api_url 2>/dev/null
+ HTTP_ACCEPT='Accept: application/vnd.github.v3.sha' fetch -T 2 -o - $api_url 2>/dev/null
else
exit 0
fi
) || return 1
- # Compare local and remote HEADs
- [[ "$local_head" != "$remote_head" ]]
+ # Compare local and remote HEADs (if they're equal there are no updates)
+ [[ "$local_head" != "$remote_head" ]] || return 1
+
+ # If local and remote HEADs don't match, check if there's a common ancestor
+ # If the merge-base call fails, $remote_head might not be downloaded so assume there are updates
+ local base
+ base=$(builtin cd -q "$ZSH"; git merge-base $local_head $remote_head 2>/dev/null) || return 0
+
+ # If the common ancestor ($base) is not $remote_head,
+ # the local HEAD is older than the remote HEAD
+ [[ $base != $remote_head ]]
}
function update_last_updated_file() {
@@ -161,7 +170,7 @@ function has_typed_input() {
fi
# Test if Oh My Zsh directory is a git repository
- if ! (cd -q "$ZSH" && LANG= git rev-parse &>/dev/null); then
+ if ! (builtin cd -q "$ZSH" && LANG= git rev-parse &>/dev/null); then
echo >&2 "[oh-my-zsh] Can't update: not a git repository."
return
fi