Skip to content

Commit a9d49ce

Browse files
ve62cacodex
andcommitted
fix(shell): harden sheldon source cache
- Write generated sheldon source output to a temporary file before replacing the cache - Fall back to synchronous zsh-defer execution when the plugin cache is unavailable Co-authored-by: Codex GPT-5.5 <noreply@openai.com>
1 parent adb568b commit a9d49ce

1 file changed

Lines changed: 30 additions & 6 deletions

File tree

home/shell/zsh.nix

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,38 @@ in
121121
(lib.mkOrder 800 ''
122122
sheldon_cache="''${XDG_CACHE_HOME:-$HOME/.cache}/sheldon/sheldon.zsh"
123123
sheldon_toml="''${XDG_CONFIG_HOME:-$HOME/.config}/sheldon/plugins.toml"
124-
if [[ ! -r "$sheldon_cache" || "$(readlink "$sheldon_toml")" != "$(cat "''${sheldon_cache}.lock" 2>/dev/null)" ]]; then
124+
sheldon_toml_target="$(readlink "$sheldon_toml" 2>/dev/null || print -r -- "$sheldon_toml")"
125+
if [[ ! -s "$sheldon_cache" || "$sheldon_toml_target" != "$(cat "''${sheldon_cache}.lock" 2>/dev/null)" ]]; then
125126
mkdir -p "''${sheldon_cache:h}"
126-
sheldon lock
127-
sheldon source > "$sheldon_cache"
128-
readlink "$sheldon_toml" > "''${sheldon_cache}.lock"
127+
sheldon_cache_tmp="''${sheldon_cache}.$$"
128+
if sheldon lock && sheldon source > "$sheldon_cache_tmp" && [[ -s "$sheldon_cache_tmp" ]]; then
129+
mv -f "$sheldon_cache_tmp" "$sheldon_cache"
130+
print -r -- "$sheldon_toml_target" > "''${sheldon_cache}.lock"
131+
rm -f "''${sheldon_cache}.zwc"
132+
else
133+
rm -f "$sheldon_cache_tmp"
134+
fi
135+
fi
136+
if [[ -s "$sheldon_cache" ]]; then
137+
source "$sheldon_cache"
138+
fi
139+
if ! (( $+functions[zsh-defer] )); then
140+
zsh-defer() {
141+
emulate -L zsh
142+
while [[ "$1" == -* ]]; do
143+
case "$1" in
144+
-t)
145+
shift 2
146+
;;
147+
*)
148+
shift
149+
;;
150+
esac
151+
done
152+
(( $# > 0 )) && "$@"
153+
}
129154
fi
130-
source "$sheldon_cache"
131-
unset sheldon_cache sheldon_toml
155+
unset sheldon_cache sheldon_toml sheldon_toml_target sheldon_cache_tmp
132156
'')
133157

134158
# Tool integrations via cache_eval instead of enableZshIntegration.

0 commit comments

Comments
 (0)