From 96b7dae3dfbd3c122985869739961d87c976204f Mon Sep 17 00:00:00 2001 From: sev Date: Fri, 5 Apr 2024 14:46:26 -0500 Subject: [PATCH 1/1] zshenv: update tmp --- etc/zsh/.zshenv | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/etc/zsh/.zshenv b/etc/zsh/.zshenv index 1248dbf..f1e6a55 100644 --- a/etc/zsh/.zshenv +++ b/etc/zsh/.zshenv @@ -154,10 +154,10 @@ if [[ ! -v _sev_setup_path || -o login ]] { # the toplevel shell has already logged out and the dirs removed, but the # chances of that are slim. if [[ ! -v _sev_tmp ]] { + _sev_tmp=~/.local/tmp # create personal TMPDIR under system tmp t=${TMPDIR:-${TEMPDIR:-${TEMP:-${TMP:-${${TMPPREFIX%/zsh}:-/tmp}}}}}/.home-$LOGNAME [[ -e $t ]] || mkdir -m700 $t 2>/dev/null - _sev_tmp=~/.local/tmp if [[ ! -d $t ]] { # fallback TMPDIR to bare local directory or existing softlink [[ -o interactive ]] && @@ -169,33 +169,34 @@ if [[ ! -v _sev_tmp ]] { [[ -o interactive ]] && print -P "%F{red}!!! Can't create tmp dir, using $_sev_tmp%f" } - } elif [[ -f $_sev_tmp || ( -d $_sev_tmp && ! -h $_sev_tmp ) ]] { - # file or non-softlink directory is on our local dir + } elif [[ -e $_sev_tmp && ! -h $_sev_tmp ]] { + # non-softlink node is on our local dir [[ -o interactive ]] && print -P "%F{orange}*** $_sev_tmp exists, can't link to tmp dir $t, ignoring it%f" _sev_tmp=$t } else { - # link local dir to tmp dir - if [[ -h $_sev_tmp && $_sev_tmp:P != $t:P ]] { - [[ -o interactive ]] && + if [[ -h $_sev_tmp ]] { + [[ -o interactive && $_sev_tmp:P != $t:P ]] && print -P "%F{orange}*** $_sev_tmp links to ${_sev_tmp:P} and not ${t:P}, unlinking it%f" - # XXX: race condition for existing sessions still using this dir + # NOTE: ln -f doesn't seem to work reliably with softlink + # directories, so explicitly remove the target if it exists + # XXX: potential race condition + # TODO: handle cleanup of old dir if it doesn't match? unlink $_sev_tmp 2>/dev/null } + # link local dir to tmp dir ln -s $t $_sev_tmp 2>/dev/null } - if [[ -v _sev_tmp ]] { - # ensure dir is clean - _sev_zcleanup tmp - # finally create our subdir for this session - t=$_sev_tmp/.session.$$ - if ! mkdir -m700 $t 2>/dev/null; then - [[ -o interactive ]] && - print -P "%F{red}!!! Can't create session tmp subdir $t, using $_sev_tmp%f" - t=$_sev_tmp - fi - export _sev_tmp TMPDIR=$t TEMPDIR=$t TEMP=$t TMP=$t TMPPREFIX=$t/zsh - } + # ensure dir is clean + _sev_zcleanup tmp + # finally create our subdir for this session + t=$_sev_tmp/.session.$$ + if ! mkdir -m700 $t 2>/dev/null; then + [[ -o interactive ]] && + print -P "%F{red}!!! Can't create session tmp subdir $t, using $_sev_tmp%f" + t=$_sev_tmp + fi + export _sev_tmp TMPDIR=$t TEMPDIR=$t TEMP=$t TMP=$t TMPPREFIX=$t/zsh unset t } -- 2.47.0