From ac2843d8c8f454ee96510b53985696a81c3ca5c9 Mon Sep 17 00:00:00 2001 From: Eric Nielsen Date: Tue, 18 Jan 2022 20:51:11 -0500 Subject: [PATCH] Simplify check-dumpfile to do the same as compinit first because simpler is usually better, and second because we cannot always guarantee that the .latest_comp file, which was holding the list of all completion functions, is consistently in sync with the dumpfile that is generated afterwards. --- CHANGELOG.md | 6 ++---- src/stage2/50_zimfw_check_dumpfile.zsh.erb | 13 +++++-------- zimfw.zsh | 15 ++++++--------- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2958251..3ce6501 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `check-dumpfile` action. It runs in the build, install and update actions, and checks if a - new completion configuration needs to be dumped. It's more powerful than `compinit`, which - just checks if the number of completion functions and the Zsh version changed. The - `check-dumpfile` action also checks if the actual list of completion functions changed. It's - intended to be used with `compinit -C`, so no checks are done during the shell startup. + new completion configuration needs to be dumped. It's intended to be used with `compinit -C`, + so no checks are done during the shell startup. ## [1.7.0] - 2022-01-12 diff --git a/src/stage2/50_zimfw_check_dumpfile.zsh.erb b/src/stage2/50_zimfw_check_dumpfile.zsh.erb index 1038f9c..4d0f615 100644 --- a/src/stage2/50_zimfw_check_dumpfile.zsh.erb +++ b/src/stage2/50_zimfw_check_dumpfile.zsh.erb @@ -1,15 +1,12 @@ _zimfw_check_dumpfile() { - local -r ztarget=${ZIM_HOME}/.latest_comp zpre=$'*\0' - local zdumpfile zline ckline= - zstyle -s ':zim:completion' dumpfile 'zdumpfile' || zdumpfile=<%= home %>/.zcompdump - if [[ -r ${ztarget} ]] ckline=$(command cksum < ${ztarget} 2>/dev/null) + local zdumpfile zline + local -r zpre=$'*\0' local -r zfpath=(${${_zfpaths#${~zpre}}:A} ${fpath:|_zim_fpath}) - local -r zcomp=(${^zfpath}/^([^_]*|*~|*.zwc(|.old))(N:t)) - print -R ${(o)zcomp} >! ${ztarget} || return 1 + local -r zcomps=(${^zfpath}/^([^_]*|*~|*.zwc(|.old))(N:t)) + zstyle -s ':zim:completion' dumpfile 'zdumpfile' || zdumpfile=<%= home %>/.zcompdump if [[ -e ${zdumpfile} ]]; then IFS=$' \t' read -rA zline < ${zdumpfile} || return 1 - if [[ ${zline[2]} -eq ${#zcomp} && ${zline[4]} == ${ZSH_VERSION} && \ - $(command cksum < ${ztarget} 2>/dev/null) == ${ckline} ]]; then + if [[ ${zline[2]} -eq ${#zcomps} && ${zline[4]} == ${ZSH_VERSION} ]]; then _zimfw_print -PR "<%= okay %>%B${zdumpfile}:%b Already up to date" else _zimfw_print -PR "<%= okay %>%B${zdumpfile}:%b New completion configuration needs to be dumped. Will do %Bclean-dumpfile%b." diff --git a/zimfw.zsh b/zimfw.zsh index de55d5a..9094f33 100644 --- a/zimfw.zsh +++ b/zimfw.zsh @@ -323,17 +323,14 @@ _zimfw_version_check() { } _zimfw_check_dumpfile() { - local -r ztarget=${ZIM_HOME}/.latest_comp zpre=$'*\0' - local zdumpfile zline ckline= - zstyle -s ':zim:completion' dumpfile 'zdumpfile' || zdumpfile=${ZDOTDIR:-${HOME}}/.zcompdump - if [[ -r ${ztarget} ]] ckline=$(command cksum < ${ztarget} 2>/dev/null) + local zdumpfile zline + local -r zpre=$'*\0' local -r zfpath=(${${_zfpaths#${~zpre}}:A} ${fpath:|_zim_fpath}) - local -r zcomp=(${^zfpath}/^([^_]*|*~|*.zwc(|.old))(N:t)) - print -R ${(o)zcomp} >! ${ztarget} || return 1 + local -r zcomps=(${^zfpath}/^([^_]*|*~|*.zwc(|.old))(N:t)) + zstyle -s ':zim:completion' dumpfile 'zdumpfile' || zdumpfile=${ZDOTDIR:-${HOME}}/.zcompdump if [[ -e ${zdumpfile} ]]; then IFS=$' \t' read -rA zline < ${zdumpfile} || return 1 - if [[ ${zline[2]} -eq ${#zcomp} && ${zline[4]} == ${ZSH_VERSION} && \ - $(command cksum < ${ztarget} 2>/dev/null) == ${ckline} ]]; then + if [[ ${zline[2]} -eq ${#zcomps} && ${zline[4]} == ${ZSH_VERSION} ]]; then _zimfw_print -PR "%F{green})%f %B${zdumpfile}:%b Already up to date" else _zimfw_print -PR "%F{green})%f %B${zdumpfile}:%b New completion configuration needs to be dumped. Will do %Bclean-dumpfile%b." @@ -376,7 +373,7 @@ _zimfw_compile() { } _zimfw_info() { - print -R 'zimfw version: '${_zversion}' (built at 2022-01-18 19:51:41 UTC, previous commit is bd765df)' + print -R 'zimfw version: '${_zversion}' (built at 2022-01-19 01:49:13 UTC, previous commit is 35e1d2e)' print -R 'ZIM_HOME: '${ZIM_HOME} print -R 'Zsh version: '${ZSH_VERSION} print -R 'System info: '$(command uname -a)