From c3fd96c42940278bba39741252f6c9cca6cb111d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Fri, 6 May 2022 19:51:51 +0300 Subject: [PATCH] Version file read improvements (#2269) * Don't bother reading empty version files * Implement version file read in pure bash Is faster with usual sized version files, slower with degenerate cases. --- libexec/pyenv-version-file-read | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/libexec/pyenv-version-file-read b/libexec/pyenv-version-file-read index 214d1ef4..5dcc40fc 100755 --- a/libexec/pyenv-version-file-read +++ b/libexec/pyenv-version-file-read @@ -5,18 +5,17 @@ set -e VERSION_FILE="$1" -if [ -e "$VERSION_FILE" ]; then +if [ -s "$VERSION_FILE" ]; then # Read the first non-whitespace word from the specified version file. # Be careful not to load it whole in case there's something crazy in it. IFS="${IFS}"$'\r' - words=($(cut -b 1-1024 "$VERSION_FILE" | sed -n 's/^[[:space:]]*\([^[:space:]#][^[:space:]]*\).*/\1/p')) - versions=("${words[@]}") - - if [ -n "$versions" ]; then - IFS=":" - echo "${versions[*]}" - exit - fi + sep= + while read -n 1024 -r version _ || [[ $version ]]; do + [[ -z $version || $version == \#* ]] && continue + printf "%s%s" "$sep" "$version" + sep=: + done <"$VERSION_FILE" + [[ $sep ]] && { echo; exit; } fi exit 1