From 23bcdebe18a475613022307fba6ce966d70fb29a Mon Sep 17 00:00:00 2001 From: Jake Lodwick Date: Tue, 3 Mar 2026 23:02:44 -0800 Subject: [PATCH] versions: fast path for --bare --skip-aliases (#3411) Skip sort, native extension probe, and per-symlink realpath when called with --bare --skip-aliases (the rehash case). Use readlink to distinguish internal aliases (relative target) from external installs (absolute target). In MacOS, speeds up rehash by 5.2 ms (7%) in empty environment, 55.9 ms (33%) in a regular environment (3 ver, 12 venvs, 320 bins), 93.7 ms (15%) in a large environment (6 ver, 60 venvs, 1466 bins) --- libexec/pyenv-versions | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libexec/pyenv-versions b/libexec/pyenv-versions index dbccaa32..afe8747f 100755 --- a/libexec/pyenv-versions +++ b/libexec/pyenv-versions @@ -26,6 +26,29 @@ for arg; do esac done +# Fast path for --bare --skip-aliases: skip sort and full realpath resolution +if [[ -n "$bare" && -n "$skip_aliases" ]]; then + versions_dir="${PYENV_ROOT}/versions" + if [ -d "$versions_dir" ]; then + shopt -s dotglob nullglob + for path in "$versions_dir"/*/; do + path="${path%/}" + if [ -L "$path" ]; then + # Relative link = internal alias → skip; absolute = external → keep + [[ "$(readlink "$path")" == /* ]] || continue + fi + echo "${path##*/}" + if [[ -z "$skip_envs" ]]; then + for env_path in "${path}/envs/"*; do + [ -d "$env_path" ] && echo "${env_path#${versions_dir}/}" + done + fi + done + shopt -u dotglob nullglob + fi + exit 0 +fi + versions_dir="${PYENV_ROOT}/versions" if ! enable -f "${BASH_SOURCE%/*}"/pyenv-realpath.dylib realpath 2>/dev/null; then