zinit update fails to run mv"bin* -> bin" instructions
What did you expect to happen?
Running zinit update upgrades my zsh modules correctly, I expected the same from topgrade.
What actually happened?
I have these two modules in my zshrc that I noticed are affected:
zinit ice wait lucid from"gh-r" as"program" mv"gh* -> gh" pick"gh/bin/gh" \
atclone='./gh/bin/gh completion --shell zsh > _gh' atpull'%atclone'
zinit load cli/cli
zinit ice \
wait lucid from"gh-r" as"program" mv"direnv* -> direnv" \
atclone'./direnv hook zsh > zhook.zsh' atpull'%atclone' \
pick"direnv" src="zhook.zsh"
zinit load direnv/direnv
Whenever topgrade bumps the version of gh or direnv, I start getting these errors in my shell:
_direnv_hook:2: no such file or directory: /Users/underyx/.zinit/plugins/direnv---direnv/direnv
This is because the mv"direnv* -> direnv" instruction is supposed to make zinit rename this file to direnv after an update, but the rename doesn't happen (only when topgrade runs zinit update):
.zinit/plugins/direnv---direnv $ ls -ltr
total 18552
-rwxr-xr-x 1 underyx staff 8861200 Nov 29 10:45 direnv.darwin-arm64
Additional Details
The rename happens correctly when I run zinit update in my shell.
The command executed for zinit is:
―― 11:01:58 - zinit ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
DEBUG Executing command `/bin/zsh -i -c 'source /Users/underyx/.zshrc && zinit self-update && zinit update --all'
which seems correct. I'm suspecting that for some reason in the subshell topgrade uses, the mv"direnv* -> direnv" instruction somehow gets glob expanded. If this is the case, then the asterisk should be passed to zinit verbatim for correct behavior. Or it might be the exact other way; maybe zinit normally relies on the shell resolving direnv* but this doesn't happen when running via topgrade.
You can find my dotfiles here: https://github.com/underyx/dotfiles
And specifically the zinit modules here: https://github.com/underyx/dotfiles/blob/main/zsh/main
- Which operating system or Linux distribution are you using? macOS
- How did you install Topgrade? Brew
- Which version are you running? 10.2.0
Sorry for the late response, was stressed the last weeks.
What happens when you run this command:
/bin/zsh -i -c 'source /Users/underyx/.zshrc && zinit self-update && zinit update --all'
hey, no worries at all! I just ran it (because I need to wait until an update is actually available for something to trigger the error) and it indeed caused the same issue!
I'll mention that there's another annoying behavior when using the command you provided (and also when running topgrade). The self-update prints its changelog with an interactive pager and everything is suspended until I press q to exit it. This doesn't happen if I remove the -i flag from the /bin/zsh command.