Optional async check for latest version

every 30 days, storing it in a .latest_version file.

Also allow disabling this with:

    zstyle ':zim' disable-version-check yes
This commit is contained in:
Eric Nielsen 2020-01-15 12:35:30 -05:00
parent 7fdf65c58f
commit 1341afe525
No known key found for this signature in database
GPG Key ID: 47D1DBFA0765A1FB
7 changed files with 64 additions and 35 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
*.zwc *.zwc
*.zwc.old *.zwc.old
/modules/ /modules/
.latest_version
/init.zsh /init.zsh
/init.zsh.old /init.zsh.old
/login_init.zsh /login_init.zsh

View File

@ -10,7 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
- `help` and `version` actions. - `help` and `version` actions.
- `-v` verbose option. Normal mode output is now cleaner and more focused. - `-v` verbose option. Normal mode output is now cleaner and more focused.
- Check the latest version using `git ls-remote`. - Asynchronously check the latest version every 30 days. This can be disabled
with `zstyle ':zim' disable-version-check yes`.
### Changed ### Changed
- When upgrading, download latest release asset instead of raw file from the - When upgrading, download latest release asset instead of raw file from the

View File

@ -48,7 +48,7 @@ Installing Zim is easy:
wget -nv -O - https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh wget -nv -O - https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh
Open a new terminal and you're done! Enjoy your Zsh IMproved! Take some time to Open a new terminal and you're done! Enjoy your Zsh IMproved! Take some time to
read about the [available modules] and tweak your `.zshrc` file. read about the [available modules] and tweak your `~/.zshrc` file.
If you have a different shell framework installed (like oh-my-zsh or prezto), If you have a different shell framework installed (like oh-my-zsh or prezto),
*uninstall those first to prevent conflicts*. *uninstall those first to prevent conflicts*.
@ -92,7 +92,7 @@ are equivalent: `name`, `zimfw/name`, `https://github.com/zimfw/name.git`.
By default, the module name is the last component in the `<url>`. Use the By default, the module name is the last component in the `<url>`. Use the
`-n|--name <module_name>` option to set a custom module name. `-n|--name <module_name>` option to set a custom module name.
#### Repository options Repository options:
* `-b|--branch <branch_name>`: Use specified branch when installing and * `-b|--branch <branch_name>`: Use specified branch when installing and
updating the module. Overrides the tag option. Default: `master`. updating the module. Overrides the tag option. Default: `master`.
@ -100,7 +100,7 @@ By default, the module name is the last component in the `<url>`. Use the
module. Overrides the branch option. module. Overrides the branch option.
* `-z|--frozen`: Don't install or update the module. * `-z|--frozen`: Don't install or update the module.
#### Initialization options Initialization options:
* `-f|--fpath <path>`: Add specified path to `fpath`. The path is relative to * `-f|--fpath <path>`: Add specified path to `fpath`. The path is relative to
the module root directory. Default: `functions`, if the subdirectory exists. the module root directory. Default: `functions`, if the subdirectory exists.
@ -109,28 +109,28 @@ By default, the module name is the last component in the `<url>`. Use the
* `-s|--source <file_path>`: Source specified file. The file path is relative * `-s|--source <file_path>`: Source specified file. The file path is relative
to the module root directory. Default: the file with largest size matching to the module root directory. Default: the file with largest size matching
`{init.zsh|module_name.{zsh|plugin.zsh|zsh-theme|sh}}`, if any exists. `{init.zsh|module_name.{zsh|plugin.zsh|zsh-theme|sh}}`, if any exists.
* `-d|--disabled`: Don't use or uninstall the module. * `-d|--disabled`: Don't initialize or uninstall the module.
### zimfw ### zimfw
Added new modules to `~/.zimrc`? Run: Added new modules to `~/.zimrc`? Run `zimfw install`.
zimfw install Removed modules from `~/.zimrc`? Run `zimfw uninstall`.
Removed modules from `~/.zimrc`? Run: Want to update your modules to their latest revisions? Run `zimfw update`.
zimfw uninstall Want to upgrade `zimfw` to its latest version? Run `zimfw upgrade`.
Want to update your modules to their latest revisions? Run:
zimfw update
Want to upgrade `~/.zim/zimfw.zsh` to the latest version? Run:
zimfw upgrade
For more information about the `zimfw` tool, run `zimfw help`. For more information about the `zimfw` tool, run `zimfw help`.
Settings
--------
By default, every 30 days `zimfw` will check if it has a new version available.
This can be disabled with:
zstyle ':zim' disable-version-check yes
Uninstalling Uninstalling
------------ ------------

View File

@ -0,0 +1,16 @@
_zimfw_version_check() {
if (( _zprintlevel > 0 )); then
setopt LOCAL_OPTIONS EXTENDED_GLOB
local -r ztarget=${ZIM_HOME}/.latest_version
# If .latest_version does not exist or was not modified in the last 30 days
if [[ ! -f ${ztarget}(#qNm-30) ]]; then
command git ls-remote --tags --refs https://github.com/zimfw/zimfw.git 'v*' | \
command sed 's?^.*/v??' | command sort -n -t. -k1,1 -k2,2 -k3,3 | \
command tail -n1 >! ${ztarget} &!
fi
local -r zlatest_version=$(<${ztarget})
if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then
print -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"$'\n'
fi
fi
}

View File

@ -1,6 +1,6 @@
_zimfw_info() { _zimfw_info() {
print -R 'Zim version: '${_zversion}' (previous commit is <%= `git rev-parse --short HEAD | tr -d '\r\n'` %>)' print -R 'zimfw version: '${_zversion}' (previous commit is <%= `git rev-parse --short HEAD | tr -d '\r\n'` %>)'
print -R 'ZIM_HOME: '${ZIM_HOME} print -R 'ZIM_HOME: '${ZIM_HOME}
print -R 'Zsh version: '${ZSH_VERSION} print -R 'Zsh version: '${ZSH_VERSION}
print -R 'System info: '$(command uname -a) print -R 'System info: '$(command uname -a)
} }

View File

@ -37,11 +37,8 @@ Options:
esac esac
fi fi
if (( _zprintlevel > 0 )); then if ! zstyle -t ':zim' disable-version-check; then
local -r zlatestversion=$(command git ls-remote --tags --refs https://github.com/zimfw/zimfw.git 'v*' | sed 's?^.*/v??' | sort -n -t. -k1,1 -k2,2 -k3,3 | tail -n1) _zimfw_version_check
if [[ ${_zversion} != ${zlatestversion} ]]; then
print -PR "%F{yellow}Latest zimfw version is %B${zlatestversion}%b. You're using version %B${_zversion}%b. Run %Bzimfw upgrade%b to upgrade.%f"$'\n'
fi
fi fi
case ${1} in case ${1} in

View File

@ -236,6 +236,23 @@ _zimfw_source_zimrc() {
fi fi
} }
_zimfw_version_check() {
if (( _zprintlevel > 0 )); then
setopt LOCAL_OPTIONS EXTENDED_GLOB
local -r ztarget=${ZIM_HOME}/.latest_version
# If .latest_version does not exist or was not modified in the last 30 days
if [[ ! -f ${ztarget}(#qNm-30) ]]; then
command git ls-remote --tags --refs https://github.com/zimfw/zimfw.git 'v*' | \
command sed 's?^.*/v??' | command sort -n -t. -k1,1 -k2,2 -k3,3 | \
command tail -n1 >! ${ztarget} &!
fi
local -r zlatest_version=$(<${ztarget})
if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then
print -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"$'\n'
fi
fi
}
_zimfw_clean_compiled() { _zimfw_clean_compiled() {
local zopt local zopt
(( _zprintlevel > 0 )) && zopt='-v' (( _zprintlevel > 0 )) && zopt='-v'
@ -259,10 +276,10 @@ _zimfw_compile() {
} }
_zimfw_info() { _zimfw_info() {
print -R 'Zim version: '${_zversion}' (previous commit is be2be83)' print -R 'zimfw version: '${_zversion}' (previous commit is 7fdf65c)'
print -R 'ZIM_HOME: '${ZIM_HOME} print -R 'ZIM_HOME: '${ZIM_HOME}
print -R 'Zsh version: '${ZSH_VERSION} print -R 'Zsh version: '${ZSH_VERSION}
print -R 'System info: '$(command uname -a) print -R 'System info: '$(command uname -a)
} }
_zimfw_uninstall() { _zimfw_uninstall() {
@ -338,11 +355,8 @@ Options:
esac esac
fi fi
if (( _zprintlevel > 0 )); then if ! zstyle -t ':zim' disable-version-check; then
local -r zlatestversion=$(command git ls-remote --tags --refs https://github.com/zimfw/zimfw.git 'v*' | sed 's?^.*/v??' | sort -n -t. -k1,1 -k2,2 -k3,3 | tail -n1) _zimfw_version_check
if [[ ${_zversion} != ${zlatestversion} ]]; then
print -PR "%F{yellow}Latest zimfw version is %B${zlatestversion}%b. You're using version %B${_zversion}%b. Run %Bzimfw upgrade%b to upgrade.%f"$'\n'
fi
fi fi
case ${1} in case ${1} in