summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorMarc Cornellà <hello@mcornella.com>2022-02-23 19:23:54 +0100
committerMarc Cornellà <hello@mcornella.com>2022-02-24 13:51:16 +0100
commit0b0af4df6aab075d257d4a0dcfd1bf42318fc69a (patch)
treed9ca0620195cdd6642f85592bfe6b4a3171d7b28 /tools
parentff298365626c4366eac930793918c6fbfb8c5d9a (diff)
downloadzsh-0b0af4df6aab075d257d4a0dcfd1bf42318fc69a.tar.gz
zsh-0b0af4df6aab075d257d4a0dcfd1bf42318fc69a.tar.bz2
zsh-0b0af4df6aab075d257d4a0dcfd1bf42318fc69a.zip
fix(updater): fix check for latest commit in local repository
The previous check simply compared whether the last commit of the branch was the same in the local and the remote repository. This commit also checks whether the remote commit is an ancestor of the local commit. This fixes the case where the local repository has new commits after the last published commit.
Diffstat (limited to 'tools')
-rw-r--r--tools/check_for_upgrade.sh13
1 files changed, 11 insertions, 2 deletions
diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh
index 2ad1fca92..76d42d388 100644
--- a/tools/check_for_upgrade.sh
+++ b/tools/check_for_upgrade.sh
@@ -75,8 +75,17 @@ function is_update_available() {
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=$(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() {