This commit is contained in:
Ivan Pozdeev 2025-12-05 10:38:11 +03:00
parent bee9b50391
commit 09860505ed

View File

@ -35,7 +35,7 @@ release_lock() {
} }
if [ ! -w "$SHIM_PATH" ]; then if [ ! -w "$SHIM_PATH" ]; then
echo "pyenv: cannot rehash: $SHIM_PATH isn't writable" echo "pyenv: cannot rehash: $SHIM_PATH isn't writable" >&2
exit 1 exit 1
fi fi
@ -53,18 +53,20 @@ while (( SECONDS <= start + ${PYENV_REHASH_TIMEOUT:-60} )); do
# in a way that taxes the usual use case as little as possible. # in a way that taxes the usual use case as little as possible.
if [[ -z $tested_for_other_write_errors ]]; then if [[ -z $tested_for_other_write_errors ]]; then
( t="$(mktemp -p "$SHIM_PATH")" && rm "$t" ) && tested_for_other_write_errors=1 || ( t="$(mktemp -p "$SHIM_PATH")" && rm "$t" ) && tested_for_other_write_errors=1 ||
{ echo "pyenv: cannot rehash: $SHIM_PATH isn't writable"; break } { echo "pyenv: cannot rehash: $SHIM_PATH isnt writable" >&2; break; }
fi fi
# POSIX sleep(1) doesn't provide subsecond precision, but many others do # POSIX sleep(1) doesn't provide subsecond precision, but many others do
sleep 0.1 2>/dev/null || sleep 1 sleep 0.1 2>/dev/null || sleep 1
fi fi
done done
unset tested_for_other_write_errors
if [ -z "${acquired}" ]; then if [ -z "${acquired}" ]; then
echo "pyenv: cannot rehash: $PROTOTYPE_SHIM_PATH exists" if [[ -n $tested_for_other_write_errors ]]; then
echo "pyenv: cannot rehash: $PROTOTYPE_SHIM_PATH exists" >&2
fi
exit 1 exit 1
fi fi
unset tested_for_other_write_errors
# The prototype shim file is a script that re-execs itself, passing # The prototype shim file is a script that re-execs itself, passing
# its filename and any arguments to `pyenv exec`. This file is # its filename and any arguments to `pyenv exec`. This file is