Make forced check-version asynchronous (again)

as it was before a34b8dab64.
Don't make zimfw hang in the foreground waiting for git to connect to
GitHub, mainly because the waiting can take too long in case of
connection issues or no network. Also set git timeout to 30 seconds so
background check also does hang for too long, just it case.

Fixes #514
This commit is contained in:
Eric Nielsen 2023-06-16 20:24:33 -05:00
parent 0566b9b8a3
commit 49386cad6d
No known key found for this signature in database
GPG Key ID: 678AF5E338C87D99
3 changed files with 41 additions and 19 deletions

View File

@ -1,14 +1,25 @@
_zimfw_check_version() { _zimfw_check_version() {
if [[ ${1} -ne 0 ]]; then if (( ${1} )); then
# Get latest version (get all `v*` tags from repo, delete `*v` from beginning, # Get latest version (get all `v*` tags from repo, delete `*v` from beginning,
# sort in descending `O`rder `n`umerically, and get the `[1]` first) # sort in descending `O`rder `n`umerically, and get the `[1]` first)
local tags if (( ${2} )); then
tags=$(command git ls-remote --tags --refs https://github.com/zimfw/zimfw.git 'v*') || return 1 # background check
>! ${_zversion_target} <<<${${(On)${(f)tags}##*v}[1]} || return 1 if [[ -w ${_zversion_target:h} ]]; then
print -R ${${(On)${(f)"$(GIT_HTTP_LOW_SPEED_LIMIT=1000 GIT_HTTP_LOW_SPEED_TIME=30 command git ls-remote --tags --refs \
https://github.com/zimfw/zimfw.git 'v*' 2>/dev/null)"}##*v}[1]} >! ${_zversion_target} &!
fi
else
# foreground check
local tags
tags=$(command git ls-remote --tags --refs https://github.com/zimfw/zimfw.git 'v*') || return 1
>! ${_zversion_target} <<<${${(On)${(f)tags}##*v}[1]} || return 1
fi
fi fi
local -r zlatest_version=$(<${_zversion_target}) if [[ -f ${_zversion_target} ]]; then
if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then local -r zlatest_version=$(<${_zversion_target})
_zimfw_print -u2 -PR "%F{yellow}Latest zimfw version is %B${zlatest_version}%b. You're using version %B${_zversion}%b. Run %Bzimfw upgrade%b to upgrade.%f" if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then
return 4 _zimfw_print -u2 -PR "%F{yellow}Latest zimfw version is %B${zlatest_version}%b. You're using version %B${_zversion}%b. Run %Bzimfw upgrade%b to upgrade.%f"
return 4
fi
fi fi
} }

View File

@ -49,7 +49,7 @@ Options:
if ! zstyle -t ':zim' disable-version-check && [[ ${1} != check-version ]]; then if ! zstyle -t ':zim' disable-version-check && [[ ${1} != check-version ]]; then
# If .latest_version does not exist or was not modified in the last 30 days # If .latest_version does not exist or was not modified in the last 30 days
[[ -f ${_zversion_target}(#qNm-30) ]]; local -r zversion_check_force=${?} [[ -f ${_zversion_target}(#qNm-30) ]]; local -r zversion_check_force=${?}
_zimfw_check_version ${zversion_check_force} _zimfw_check_version ${zversion_check_force} 1
fi fi
local _zrestartmsg=' Restart your terminal for changes to take effect.' local _zrestartmsg=' Restart your terminal for changes to take effect.'

View File

@ -386,17 +386,28 @@ _zimfw_check_dumpfile() {
} }
_zimfw_check_version() { _zimfw_check_version() {
if [[ ${1} -ne 0 ]]; then if (( ${1} )); then
# Get latest version (get all `v*` tags from repo, delete `*v` from beginning, # Get latest version (get all `v*` tags from repo, delete `*v` from beginning,
# sort in descending `O`rder `n`umerically, and get the `[1]` first) # sort in descending `O`rder `n`umerically, and get the `[1]` first)
local tags if (( ${2} )); then
tags=$(command git ls-remote --tags --refs https://github.com/zimfw/zimfw.git 'v*') || return 1 # background check
>! ${_zversion_target} <<<${${(On)${(f)tags}##*v}[1]} || return 1 if [[ -w ${_zversion_target:h} ]]; then
print -R ${${(On)${(f)"$(GIT_HTTP_LOW_SPEED_LIMIT=1000 GIT_HTTP_LOW_SPEED_TIME=30 command git ls-remote --tags --refs \
https://github.com/zimfw/zimfw.git 'v*' 2>/dev/null)"}##*v}[1]} >! ${_zversion_target} &!
fi
else
# foreground check
local tags
tags=$(command git ls-remote --tags --refs https://github.com/zimfw/zimfw.git 'v*') || return 1
>! ${_zversion_target} <<<${${(On)${(f)tags}##*v}[1]} || return 1
fi
fi fi
local -r zlatest_version=$(<${_zversion_target}) if [[ -f ${_zversion_target} ]]; then
if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then local -r zlatest_version=$(<${_zversion_target})
_zimfw_print -u2 -PR "%F{yellow}Latest zimfw version is %B${zlatest_version}%b. You're using version %B${_zversion}%b. Run %Bzimfw upgrade%b to upgrade.%f" if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then
return 4 _zimfw_print -u2 -PR "%F{yellow}Latest zimfw version is %B${zlatest_version}%b. You're using version %B${_zversion}%b. Run %Bzimfw upgrade%b to upgrade.%f"
return 4
fi
fi fi
} }
@ -435,7 +446,7 @@ _zimfw_compile() {
} }
_zimfw_info() { _zimfw_info() {
print -R 'zimfw version: '${_zversion}' (built at 2023-06-15 14:32:20 UTC, previous commit is f9648e0)' print -R 'zimfw version: '${_zversion}' (built at 2023-06-17 01:23:46 UTC, previous commit is 0566b9b)'
local zparam local zparam
for zparam in LANG ${(Mk)parameters:#LC_*} OSTYPE TERM TERM_PROGRAM TERM_PROGRAM_VERSION ZIM_HOME ZSH_VERSION; do for zparam in LANG ${(Mk)parameters:#LC_*} OSTYPE TERM TERM_PROGRAM TERM_PROGRAM_VERSION ZIM_HOME ZSH_VERSION; do
print -R ${(r.22....:.)zparam}${(P)zparam} print -R ${(r.22....:.)zparam}${(P)zparam}
@ -885,7 +896,7 @@ Options:
if ! zstyle -t ':zim' disable-version-check && [[ ${1} != check-version ]]; then if ! zstyle -t ':zim' disable-version-check && [[ ${1} != check-version ]]; then
# If .latest_version does not exist or was not modified in the last 30 days # If .latest_version does not exist or was not modified in the last 30 days
[[ -f ${_zversion_target}(#qNm-30) ]]; local -r zversion_check_force=${?} [[ -f ${_zversion_target}(#qNm-30) ]]; local -r zversion_check_force=${?}
_zimfw_check_version ${zversion_check_force} _zimfw_check_version ${zversion_check_force} 1
fi fi
local _zrestartmsg=' Restart your terminal for changes to take effect.' local _zrestartmsg=' Restart your terminal for changes to take effect.'