Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package pyenv for openSUSE:Factory checked 
in at 2026-04-13 23:20:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pyenv (Old)
 and      /work/SRC/openSUSE:Factory/.pyenv.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pyenv"

Mon Apr 13 23:20:21 2026 rev:63 rq:1346476 version:2.6.27

Changes:
--------
--- /work/SRC/openSUSE:Factory/pyenv/pyenv.changes      2026-01-13 
21:35:37.210612391 +0100
+++ /work/SRC/openSUSE:Factory/.pyenv.new.21863/pyenv.changes   2026-04-13 
23:22:39.985482676 +0200
@@ -1,0 +2,70 @@
+Fri Apr 10 06:22:12 UTC 2026 - Thomas Schraitle <[email protected]> - 
2.6.27
+
+- Update 2.6.27
+  * commands: fast path for --sh, replace sort|uniq with sort -u by 
@jakelodwick in #3423
+  * which: update the pyenv help global tip by @native-api in #3424
+  * Bump actions/create-github-app-token from 2 to 3 in the github-actions 
group by @dependabot[bot] in #3428
+  * python-build: advise user with no c compiler by @exurd in #3294
+  * Add CPython 3.13.13, 3.14.4, 3.15.0a8 by @pyenv-bot[bot] in #3432
+  * Add miniforge3 26.1.1-2, 26.1.1-3 by @native-api in #3433
+
+-------------------------------------------------------------------
+Fri Apr 10 06:21:28 UTC 2026 - Thomas Schraitle <[email protected]> - 
2.6.26
+
+- Update 2.6.26
+  * versions: fast path for --bare --skip-aliases by @jakelodwick in #3411
+  * Fix MacPorts OpenSSL formula detection by @tekintian in #3417
+  * rehash: streamline executables discovery; fix regression by @native-api in 
#3418
+  * rehash: simplify source.bash pipeline by @jakelodwick in #3419
+  * Add CPython 3.15.0a7 by @pyenv-bot[bot] in #3421
+  * Add miniconda3-26.1.1-1 by @native-api in #3422
+
+-------------------------------------------------------------------
+Fri Apr 10 06:20:59 UTC 2026 - Thomas Schraitle <[email protected]> - 
2.6.25
+
+- Update 2.6.25
+  * Add miniforge3-26.1.0-0 by @native-api in #3413
+  * Add CPython 3.12.13 by @pyenv-bot[bot] in #3414
+
+-------------------------------------------------------------------
+Fri Apr 10 06:20:27 UTC 2026 - Thomas Schraitle <[email protected]> - 
2.6.24
+
+- Update 2.6.24
+  * CI: add_version: use Github App token to create PR by @native-api in #3406
+  * Add Anaconda3-2025.12-2 by @binbjz in #3408
+  * rehash: Drop redundant sort -u from make_shims call by @jakelodwick in 
#3410
+  * Add CPython 3.10.20, 3.11.15 by @pyenv-bot[bot] in #3412
+
+-------------------------------------------------------------------
+Fri Apr 10 06:19:57 UTC 2026 - Thomas Schraitle <[email protected]> - 
2.6.23
+
+- Update 2.6.23
+  * Add CPython 3.15.0a6 by @native-api in #3403
+
+-------------------------------------------------------------------
+Fri Apr 10 06:19:34 UTC 2026 - Thomas Schraitle <[email protected]> - 
2.6.22
+
+- Update 2.6.22
+  * Add CPython 3.13.12 by @github-actions[bot] in #3401
+
+-------------------------------------------------------------------
+Fri Apr 10 06:19:04 UTC 2026 - Thomas Schraitle <[email protected]> - 
2.6.21
+
+- Update 2.6.21
+  * Add GraalPy 25.0.2 by @msimacek in #3395
+  * Add CPython 3.14.3 by @github-actions[bot] in #3400
+
+-------------------------------------------------------------------
+Fri Apr 10 06:18:26 UTC 2026 - Thomas Schraitle <[email protected]> - 
2.6.20
+
+- Update 2.6.20
+  * CI: adjust CPython PR generation logic by @native-api in #3392
+  * Add CPython 3.15.0a5 by @nedbat in #3393
+
+-------------------------------------------------------------------
+Fri Apr 10 06:17:48 UTC 2026 - Thomas Schraitle <[email protected]> - 
2.6.19
+
+- Update 2.6.19
+  * Add CPython 3.15.0a4 by @nedbat in #3390
+
+-------------------------------------------------------------------

Old:
----
  pyenv-2.6.18.tar.gz

New:
----
  pyenv-2.6.27.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pyenv.spec ++++++
--- /var/tmp/diff_new_pack.AQUori/_old  2026-04-13 23:22:41.153530866 +0200
+++ /var/tmp/diff_new_pack.AQUori/_new  2026-04-13 23:22:41.157531031 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package pyenv
 #
-# Copyright (c) 2026 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %define pyenv_dir      %{_libexecdir}/pyenv
 #
 Name:           pyenv
-Version:        2.6.18
+Version:        2.6.27
 Release:        0
 Summary:        Python Version Management
 License:        MIT

++++++ pyenv-2.6.18.tar.gz -> pyenv-2.6.27.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/.github/workflows/add_version.yml 
new/pyenv-2.6.27/.github/workflows/add_version.yml
--- old/pyenv-2.6.18/.github/workflows/add_version.yml  2026-01-10 
04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/.github/workflows/add_version.yml  2026-04-08 
17:26:46.000000000 +0200
@@ -4,7 +4,7 @@
   workflow_dispatch: {}
   schedule:
     # Every N hours
-    - cron: '* */8 * * *'
+    - cron: '0 */4 * * *'
 
 permissions:
   contents: write
@@ -15,18 +15,19 @@
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v6
-      - uses: actions/setup-python@v6     
+      - uses: actions/setup-python@v6
         with:
           python-version: 3
           cache: 'pip'
           cache-dependency-path: plugins/python-build/scripts/requirements.txt
       - run: pip install -r plugins/python-build/scripts/requirements.txt
-      
+
       - name: check for a release
         run: |
           python plugins/python-build/scripts/add_cpython.py --verbose 
>added_versions.lst && rc=$? || rc=$?
           echo "rc=$rc" >> $GITHUB_ENV
       - name: set PR properties
+        if: env.rc == 0
         shell: python
         run: |
           import os
@@ -34,12 +35,21 @@
           versions=[l.rstrip() for l in open("added_versions.lst")]
           with open(os.environ['GITHUB_ENV'],'a') as f:
             f.write(f'branch_name=auto_add_version/{"_".join(versions)}\n')
-            f.write(f'pr_name=Add {", ".join(versions)}\n')
+            f.write(f'pr_name=Add CPython {", ".join(versions)}\n')
           os.remove("added_versions.lst")
-      
+
+      # 
https://github.com/peter-evans/create-pull-request/blob/main/docs/concepts-guidelines.md#authenticating-with-github-app-generated-tokens
+      - name: Generate Github token
+        if: env.rc == 0
+        uses: actions/create-github-app-token@v3
+        id: generate-token
+        with:
+          app-id: ${{ vars.PYENV_BOT_APP_ID }}
+          private-key: ${{ secrets.PYENV_BOT_PRIVATE_KEY }}
       - name: Create Pull Request
         uses: peter-evans/create-pull-request@v8
         if: env.rc == 0
         with:
           branch: ${{ env.branch_name }}
           title: ${{ env.pr_name }}
+          token: ${{ steps.generate-token.outputs.token }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/.github/workflows/modified_scripts_build.yml 
new/pyenv-2.6.27/.github/workflows/modified_scripts_build.yml
--- old/pyenv-2.6.18/.github/workflows/modified_scripts_build.yml       
2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/.github/workflows/modified_scripts_build.yml       
2026-04-08 17:26:46.000000000 +0200
@@ -56,6 +56,14 @@
               if name == 'anaconda3' and version >= 
packaging.version.Version('2025.12'):
                 result.append({'os':'macos-15-intel','python-version':line})
           
+            if m:=re.match(r'graalpy-(community-)?-(\d+\.\d+.\d+)', line):
+              version = packaging.version.Version(m.group(2))
+              
+              # GraalPy dropped MacOS x64 support
+              if version >= packaging.version.Version('25.0.2'):
+                result.append({'os':'macos-15-intel','python-version':line})
+              
+          
           EOF = str(random.getrandbits(15*8))
           
           with open(os.environ['GITHUB_ENV'],'w') as f:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/CHANGELOG.md 
new/pyenv-2.6.27/CHANGELOG.md
--- old/pyenv-2.6.18/CHANGELOG.md       2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/CHANGELOG.md       2026-04-08 17:26:46.000000000 +0200
@@ -1,5 +1,47 @@
 # Version History
 
+## Release v2.6.27
+* commands: fast path for --sh, replace sort|uniq with sort -u by @jakelodwick 
in https://github.com/pyenv/pyenv/pull/3423
+* which: update the `pyenv help global` tip by @native-api in 
https://github.com/pyenv/pyenv/pull/3424
+* Bump actions/create-github-app-token from 2 to 3 in the github-actions group 
by @dependabot[bot] in https://github.com/pyenv/pyenv/pull/3428
+* python-build: advise user with no c compiler by @exurd in 
https://github.com/pyenv/pyenv/pull/3294
+* Add CPython 3.13.13, 3.14.4, 3.15.0a8 by @pyenv-bot[bot] in 
https://github.com/pyenv/pyenv/pull/3432
+* Add miniforge3 26.1.1-2, 26.1.1-3 by @native-api in 
https://github.com/pyenv/pyenv/pull/3433
+
+## Release v2.6.26
+* versions: fast path for --bare --skip-aliases by @jakelodwick in 
https://github.com/pyenv/pyenv/pull/3411
+* Fix MacPorts OpenSSL formula detection by @tekintian in 
https://github.com/pyenv/pyenv/pull/3417
+* rehash: streamline executables discovery; fix regression by @native-api in 
https://github.com/pyenv/pyenv/pull/3418
+* rehash: simplify source.bash pipeline by @jakelodwick in 
https://github.com/pyenv/pyenv/pull/3419
+* Add CPython 3.15.0a7 by @pyenv-bot[bot] in 
https://github.com/pyenv/pyenv/pull/3421
+
+## Release v2.6.25
+* Add miniforge3-26.1.0-0 by @native-api in 
https://github.com/pyenv/pyenv/pull/3413
+* Add CPython 3.12.13 by @pyenv-bot[bot] in 
https://github.com/pyenv/pyenv/pull/3414
+
+## Release v2.6.24
+* CI: add_version: use Github App token to create PR by @native-api in 
https://github.com/pyenv/pyenv/pull/3406
+* Add Anaconda3-2025.12-2 by @binbjz in 
https://github.com/pyenv/pyenv/pull/3408
+* rehash: Drop redundant sort -u from make_shims call by @jakelodwick in 
https://github.com/pyenv/pyenv/pull/3410
+* Add CPython 3.10.20, 3.11.15 by @pyenv-bot[bot] in 
https://github.com/pyenv/pyenv/pull/3412
+
+## Release v2.6.23
+* Add CPython 3.15.0a6 by @native-api in 
https://github.com/pyenv/pyenv/pull/3403
+
+## Release v2.6.22
+* Add CPython 3.13.12 by @github-actions[bot] in 
https://github.com/pyenv/pyenv/pull/3401
+
+## Release v2.6.21
+* Add GraalPy 25.0.2 by @msimacek in https://github.com/pyenv/pyenv/pull/3395
+* Add CPython 3.14.3 by @github-actions[bot] in 
https://github.com/pyenv/pyenv/pull/3400
+
+## Release v2.6.20
+* CI: adjust CPython PR generation logic by @native-api in 
https://github.com/pyenv/pyenv/pull/3392
+* Add CPython 3.15.0a5 by @nedbat in https://github.com/pyenv/pyenv/pull/3393
+
+## Release v2.6.19
+* Add CPython 3.15.0a4 by @nedbat in https://github.com/pyenv/pyenv/pull/3390
+
 ## Release v2.6.18
 * Fix an infinite loop if a shim is symlinked to and called from a different 
location with "system" version active by @native-api in 
https://github.com/pyenv/pyenv/pull/3375
 * CI: Update and cleanup workflow scripts by @native-api in 
https://github.com/pyenv/pyenv/pull/3372
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/COMMANDS.md new/pyenv-2.6.27/COMMANDS.md
--- old/pyenv-2.6.18/COMMANDS.md        2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/COMMANDS.md        2026-04-08 17:26:46.000000000 +0200
@@ -40,9 +40,8 @@
 
 Sets a local application-specific Python version by writing the version
 name to a `.python-version` file in the current directory. This version
-overrides the global version, and can be overridden itself by setting
-the `PYENV_VERSION` environment variable or with the `pyenv shell`
-command.
+overrides the [global version](#pyenv-global), and can be overridden
+itself with the [`pyenv shell`](#pyenv-shell) command.
 
     $ pyenv local 2.7.6
 
@@ -98,9 +97,8 @@
 ## `pyenv global`
 
 Sets the global version of Python to be used in all shells by writing
-the version name to the `~/.pyenv/version` file. This version can be
-overridden by an application-specific `.python-version` file, or by
-setting the `PYENV_VERSION` environment variable.
+the version name to the `$PYENV_ROOT/version` file. This version can be
+overridden with [`pyenv local`](#pyenv-local) or [`pyenv shell`](#pyenv-shell).
 
     $ pyenv global 2.7.6
 
@@ -236,6 +234,7 @@
 You can also install the latest version of Python in a specific version line 
by supplying a prefix instead of a complete name:
 
     $ pyenv install 3.10
+    $ pyenv install 3
 
 See the [`pyenv latest` documentation](#pyenv-latest) for details on prefix 
resolution.
 
@@ -243,9 +242,6 @@
 
     pyenv install 3.8:latest
 
-To install the latest major release for Python 3 try:
-
-    pyenv install 3:latest
 
 ## `pyenv uninstall`
 
@@ -352,10 +348,9 @@
 
 Displays the latest installed or known version with the given prefix
 
-    Usage: pyenv latest [-k|--known] [-q|--quiet] <prefix>
+    Usage: pyenv latest [-k|--known] <prefix>
 
      -k/--known      Select from all known versions instead of installed
-     -q/--quiet      Do not print an error message on resolution failure
 
 Only full prefixes are searched: in the actual name, the given prefix must be 
followed by a dot or a dash.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/README.md new/pyenv-2.6.27/README.md
--- old/pyenv-2.6.18/README.md  2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/README.md  2026-04-08 17:26:46.000000000 +0200
@@ -407,7 +407,7 @@
 
 * [`pyenv shell <version>`](COMMANDS.md#pyenv-shell) -- select just for 
current shell session
 * [`pyenv local <version>`](COMMANDS.md#pyenv-local) -- automatically select 
whenever you are in the current directory (or its subdirectories)
-* [`pyenv global <version>`](COMMANDS.md#pyenv-shell) -- select globally for 
your user account
+* [`pyenv global <version>`](COMMANDS.md#pyenv-global) -- select globally for 
your user account
 
 E.g. to select the above-mentioned newly-installed Python 3.10.4 as your 
preferred version to use:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/libexec/pyenv---version 
new/pyenv-2.6.27/libexec/pyenv---version
--- old/pyenv-2.6.18/libexec/pyenv---version    2026-01-10 04:16:21.000000000 
+0100
+++ new/pyenv-2.6.27/libexec/pyenv---version    2026-04-08 17:26:46.000000000 
+0200
@@ -12,7 +12,7 @@
 set -e
 [ -n "$PYENV_DEBUG" ] && set -x
 
-version="2.6.18"
+version="2.6.27"
 git_revision=""
 
 if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q 
pyenv; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/libexec/pyenv-commands 
new/pyenv-2.6.27/libexec/pyenv-commands
--- old/pyenv-2.6.18/libexec/pyenv-commands     2026-01-10 04:16:21.000000000 
+0100
+++ new/pyenv-2.6.27/libexec/pyenv-commands     2026-04-08 17:26:46.000000000 
+0200
@@ -3,19 +3,19 @@
 # Usage: pyenv commands [--sh|--no-sh]
 
 set -e
-[ -n "$PYENV_DEBUG" ] && set -x
+[[ -n $PYENV_DEBUG ]] && set -x
 
 # Provide pyenv completions
-if [ "$1" = "--complete" ]; then
+if [[ $1 = "--complete" ]]; then
   echo --sh
   echo --no-sh
   exit
 fi
 
-if [ "$1" = "--sh" ]; then
+if [[ $1 = "--sh" ]]; then
   sh=1
   shift
-elif [ "$1" = "--no-sh" ]; then
+elif [[ $1 = "--no-sh" ]]; then
   nosh=1
   shift
 fi
@@ -24,20 +24,25 @@
 
 shopt -s nullglob
 
-{ for path in "${paths[@]}"; do
-    for command in "${path}/pyenv-"*; do
-      command="${command##*pyenv-}"
-      if [ -n "$sh" ]; then
-        if [ "${command:0:3}" = "sh-" ]; then
-          echo "${command##sh-}"
-        fi
-      elif [ -n "$nosh" ]; then
-        if [ "${command:0:3}" != "sh-" ]; then
+{ 
+  if [[ -n $sh ]]; then
+    for path in "${paths[@]}"; do
+      for command in "${path}"/pyenv-sh-*; do
+        echo "${command##*/pyenv-sh-}"
+      done
+    done
+  else
+    for path in "${paths[@]}"; do
+      for command in "${path}"/pyenv-*; do
+        command="${command##*/pyenv-}"
+        if [[ -n $nosh ]]; then
+          if [[ ${command:0:3} != "sh-" ]]; then
+            echo "$command"
+          fi
+        else
           echo "${command##sh-}"
         fi
-      else
-        echo "${command##sh-}"
-      fi
+      done
     done
-  done
-} | sort | uniq
+  fi
+} | sort -u
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/libexec/pyenv-rehash 
new/pyenv-2.6.27/libexec/pyenv-rehash
--- old/pyenv-2.6.18/libexec/pyenv-rehash       2026-01-10 04:16:21.000000000 
+0100
+++ new/pyenv-2.6.27/libexec/pyenv-rehash       2026-04-08 17:26:46.000000000 
+0200
@@ -110,17 +110,6 @@
   done
 }
 
-# List basenames of executables for every Python version
-list_executable_names() {
-  local version file
-  pyenv-versions --bare --skip-aliases | \
-  while read -r version; do
-    for file in "${PYENV_ROOT}/versions/${version}/bin/"*; do
-      echo "${file##*/}"
-    done
-  done
-}
-
 # The basename of each argument passed to `make_shims` will be
 # registered for installation as a shim. In this way, plugins may call
 # `make_shims` with a glob to register many shims at once.
@@ -196,7 +185,7 @@
 create_prototype_shim
 remove_outdated_shims
 # shellcheck disable=SC2046
-make_shims $(list_executable_names | sort -u)
+make_shims $(pyenv-versions --executables)
 
 
 # Allow plugins to register shims.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/libexec/pyenv-versions 
new/pyenv-2.6.27/libexec/pyenv-versions
--- old/pyenv-2.6.18/libexec/pyenv-versions     2026-01-10 04:16:21.000000000 
+0100
+++ new/pyenv-2.6.27/libexec/pyenv-versions     2026-04-08 17:26:46.000000000 
+0200
@@ -1,13 +1,21 @@
 #!/usr/bin/env bash
 # Summary: List all Python versions available to pyenv
-# Usage: pyenv versions [--bare] [--skip-aliases] [--skip-envs]
+# Usage: pyenv versions [--bare] [--skip-aliases] [--skip-envs] [--executables]
 #
 # Lists all Python versions found in `$PYENV_ROOT/versions/*'.
+#
+#   --bare            List just the names, omit `system'
+#   --skip-aliases    Skip symlinks to other versions and to virtual 
environments
+#   --skip-envs       Skip virtual environments (under <version>/envs)
+#   --executables     Internal. Overrides other options.
+#                     Optimally get a deduplicated list of all executable 
names in Pyenv-managed
+#                     versions and environments for `pyenv rehash'
+#
 
 set -e
 [ -n "$PYENV_DEBUG" ] && set -x
 
-unset bare skip_aliases skip_envs
+unset bare skip_aliases skip_envs executables
 # Provide pyenv completions
 for arg; do
   case "$arg" in
@@ -16,6 +24,7 @@
     echo --skip-aliases
     echo --skip-envs
     exit ;;
+  --executables ) executables=1; break ;;
   --bare ) bare=1 ;;
   --skip-aliases ) skip_aliases=1 ;;
   --skip-envs ) skip_envs=1 ;;
@@ -26,8 +35,21 @@
   esac
 done
 
+
 versions_dir="${PYENV_ROOT}/versions"
 
+# Fast path for rehash: skip filtering and link resolution
+if [[ -n "$executables" ]]; then
+  if [ -d "$versions_dir" ]; then
+    shopt -s dotglob nullglob
+    # MacOS 12+ and FreeBSD 15 support `xargs -r -0' and `basename -a'
+    # `sort -u` is simpler and a bit faster than `awk '!seen[$0]++'`, with the 
same result for rehash purposes
+    printf '%s\0' "$versions_dir"/*/bin/* "$versions_dir"/*/envs/*/bin/* | 
xargs -0 -r basename -a | sort -u
+    shopt -u dotglob nullglob
+  fi
+  exit 0
+fi
+
 if ! enable -f "${BASH_SOURCE%/*}"/pyenv-realpath.dylib realpath 2>/dev/null; 
then
   if [ -n "$PYENV_NATIVE_EXT" ]; then
     echo "pyenv: failed to load \`realpath' builtin" >&2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/libexec/pyenv-which 
new/pyenv-2.6.27/libexec/pyenv-which
--- old/pyenv-2.6.18/libexec/pyenv-which        2026-01-10 04:16:21.000000000 
+0100
+++ new/pyenv-2.6.27/libexec/pyenv-which        2026-04-08 17:26:46.000000000 
+0200
@@ -112,8 +112,8 @@
         echo "The \`$PYENV_COMMAND' command exists in these Python versions:"
         echo "$versions" | sed 's/^/  /g'
         echo
-        echo "Note: See 'pyenv help global' for tips on allowing both"
-        echo "      python2 and python3 to be found."
+        echo "Note: See 'pyenv help global' for tips on allowing multiple"
+        echo "      Python versions to be found at the same time."
       } >&2
     fi
   fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/plugins/python-build/README.md 
new/pyenv-2.6.27/plugins/python-build/README.md
--- old/pyenv-2.6.18/plugins/python-build/README.md     2026-01-10 
04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/README.md     2026-04-08 
17:26:46.000000000 +0200
@@ -175,6 +175,7 @@
 * `PYTHON_BUILD_SKIP_HOMEBREW`, if set, will not search for libraries 
installed by Homebrew when it would normally will.
 * `PYTHON_BUILD_USE_HOMEBREW`, if set, will search for libraries installed by 
Homebrew when it would normally not.
 * `PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA`, override the Homebrew OpenSSL 
formula to use.
+* `PYTHON_BUILD_MACPORTS_OPENSSL_FORMULA`, override the MacPorts OpenSSL 
formula to use. The default is `openssl3 openssl`.
 * `PYTHON_BUILD_TCLTK_FORMULA`, override the Homebrew Tcl/Tk formula to use.
 * `PYTHON_BUILD_SKIP_MACPORTS`, if set, will not search for libraries 
installed by MacPorts when it would normally will.
 * `PYTHON_BUILD_USE_MACPORTS`, if set, will search for libraries installed by 
MacPorts when it would normally not.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/plugins/python-build/bin/python-build 
new/pyenv-2.6.27/plugins/python-build/bin/python-build
--- old/pyenv-2.6.18/plugins/python-build/bin/python-build      2026-01-10 
04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/bin/python-build      2026-04-08 
17:26:46.000000000 +0200
@@ -14,7 +14,7 @@
 #   -g/--debug       Build a debug version
 #
 
-PYTHON_BUILD_VERSION="2.6.18"
+PYTHON_BUILD_VERSION="2.6.27"
 
 OLDIFS="$IFS"
 
@@ -202,7 +202,14 @@
       colorize 33 "Results logged to ${LOG_PATH}"
       printf "\n\n"
       echo "Last 10 log lines:"
-      tail -n 10 "$LOG_PATH"
+      TAIL=`tail -n 10 "$LOG_PATH"`
+      echo "$TAIL"
+      if echo "$TAIL" | grep -q "no acceptable C compiler found"; then
+        printf "\n"
+        echo "Are the build dependencies for Python correctly installed?"
+        echo "Please consult to the Wiki page for more info."
+        echo "https://github.com/pyenv/pyenv/wiki#suggested-build-environment";
+      fi
     fi
   } >&3
   exit 1
@@ -1663,12 +1670,20 @@
   # Allow overriding the preference of OpenSSL version per definition basis 
(#1302, #1325, #1326)
   
PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA="${PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA:[email protected]
 openssl}"
   export PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA
+
+  
PYTHON_BUILD_MACPORTS_OPENSSL_FORMULA="${PYTHON_BUILD_MACPORTS_OPENSSL_FORMULA:-openssl11
 openssl3 openssl}"
+  export PYTHON_BUILD_MACPORTS_OPENSSL_FORMULA
+
 }
 
 prefer_openssl3() {
   # Allow overriding the preference of OpenSSL version per definition basis 
(#1302, #1325, #1326)
   
PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA="${PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA:-openssl@3
 [email protected] openssl}"
   export PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA
+  
+  # Set MacPorts OpenSSL formula names for MacPorts environment
+  
PYTHON_BUILD_MACPORTS_OPENSSL_FORMULA="${PYTHON_BUILD_MACPORTS_OPENSSL_FORMULA:-openssl3
 openssl openssl11}"
+  export PYTHON_BUILD_MACPORTS_OPENSSL_FORMULA
 }
 
 build_package_mac_readline() {
@@ -1727,7 +1742,8 @@
   command -v port >/dev/null || return 1
   local port_location="$(command -v port)"
   local prefix="${port_location%/bin/port}"
-  for openssl in ${PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA:-openssl}; do
+  # MacPorts uses a different package naming convention and does not use the @ 
symbol.
+  for openssl in ${PYTHON_BUILD_MACPORTS_OPENSSL_FORMULA:-openssl3 openssl}; do
     if [[ $(port -q installed ${openssl} | awk '{print $3}') == "(active)" ]]; 
then
       echo "python-build: use ${openssl} from MacPorts"
       if [[ -n "${PYTHON_BUILD_CONFIGURE_WITH_OPENSSL:-}" ]]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/scripts/add_cpython.py 
new/pyenv-2.6.27/plugins/python-build/scripts/add_cpython.py
--- old/pyenv-2.6.18/plugins/python-build/scripts/add_cpython.py        
2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/scripts/add_cpython.py        
2026-04-08 17:26:46.000000000 +0200
@@ -13,9 +13,11 @@
 import itertools
 import logging
 import operator
+import os.path
 import pathlib
 import pprint
 import re
+import subprocess
 import sys
 import typing
 import urllib.parse
@@ -40,7 +42,8 @@
 
 T_THUNK=\
 '''export PYTHON_BUILD_FREE_THREADING=1
-source "${BASH_SOURCE[0]%t}"'''
+source "${BASH_SOURCE[0]%t}"
+'''
 
 
 def adapt_script(version: packaging.version.Version,
@@ -120,7 +123,7 @@
         return False
     
VersionDirectory.existing.append(_CPythonExistingScriptInfo(version,str(new_path)))
 
-    cleanup_prerelease_upgrade(is_prerelease_upgrade, previous_version)
+    cleanup_prerelease_upgrade(is_prerelease_upgrade, previous_version, 
version)
 
     handle_t_thunks(version, previous_version, is_prerelease_upgrade)
 
@@ -130,26 +133,52 @@
 
 def cleanup_prerelease_upgrade(
         is_prerelease_upgrade: bool,
-        previous_version: packaging.version.Version)\
+        previous_version: packaging.version.Version,
+        new_version: packaging.version.Version)\
         -> None:
-    if is_prerelease_upgrade:
-        previous_version_path = OUT_DIR / str(previous_version)
-        logger.info(f'Deleting {previous_version_path}')
-        previous_version_path.unlink()
-        del VersionDirectory.existing[previous_version]
+    if not is_prerelease_upgrade:
+        return
+
+    previous_version_filename = str(previous_version)
+    new_version_filename = str(new_version)
+    new_version_path = OUT_DIR / new_version_filename
+
+    logger.info(f'Git moving {previous_version_filename} '
+                f'to {new_version_filename} (preserving new data)')
+
+    data = new_version_path.read_text()
+    new_version_path.unlink()
+
+    subprocess.check_call(("git","-C",OUT_DIR,
+                           "mv",
+                           previous_version_filename,
+                           new_version_filename))
+
+    new_version_path.write_text(data)
+
+    del VersionDirectory.existing[previous_version]
 
 
 def handle_t_thunks(version, previous_version, is_prerelease_upgrade):
-    if (version.major, version.minor) >= (3, 13):
-        # an old thunk may have older version-specific code
-        # so it's safer to write a known version-independent template
-        thunk_path = OUT_DIR.joinpath(str(version) + "t")
-        logger.info(f"Writing {thunk_path}")
-        thunk_path.write_text(T_THUNK, encoding='utf-8')
-        if is_prerelease_upgrade:
-            previous_thunk_path = OUT_DIR.joinpath(str(previous_version) + "t")
-            logger.info(f"Deleting {previous_thunk_path}")
-            previous_thunk_path.unlink()
+    if (version.major, version.minor) < (3, 13):
+        return
+
+    # an old thunk may have older version-specific code
+    # so it's safer to write a known version-independent template
+    thunk_name = (str(version) + "t")
+    thunk_path = OUT_DIR / thunk_name
+    previous_thunk_name = str(previous_version) + "t"
+    previous_thunk_path = OUT_DIR / previous_thunk_name
+    if is_prerelease_upgrade:
+        logger.info(f"Git moving {previous_thunk_name} to {thunk_name}")
+        subprocess.check_call(("git","-C",OUT_DIR,
+                              "mv",
+                              previous_thunk_name,
+                              thunk_name))
+
+    logger.info(f"Writing {thunk_path}")
+    thunk_path.write_text(T_THUNK, encoding='utf-8')
+
 
 Arguments: argparse.Namespace
 
@@ -468,10 +497,13 @@
         max_item = candidates._latest_release()
         hash_ = Url.sha256_url(max_item.url, VersionDirectory.session)
 
+        permalink = 'https://ftpmirror.gnu.org/readline/' +\
+              os.path.basename(urllib.parse.urlparse(max_item.url).path)
+
         result = _ReadlineVersionInfo(
             max_item.version,
             max_item.package_name,
-            max_item.url,
+            permalink,
             hash_)
         self.append(result)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/scripts/add_miniforge.py 
new/pyenv-2.6.27/plugins/python-build/scripts/add_miniforge.py
--- old/pyenv-2.6.18/plugins/python-build/scripts/add_miniforge.py      
2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/scripts/add_miniforge.py      
2026-04-08 17:26:46.000000000 +0200
@@ -47,9 +47,9 @@
 out_dir: Path = here.parent.parent / "share" / "python-build"
 
 def download_sha(url):
-    logger.info('Downloading SHA file %(url)s', locals())
+    logger.info(f'Downloading SHA file {url}')
     tup = tuple(reversed(requests.get(url).text.replace('./', 
'').rstrip().split()))
-    logger.debug('Got %(tup)s', locals())
+    logger.debug(f'Got {tup}')
     return tup
 
 def create_spec(filename, sha, url):
@@ -72,7 +72,7 @@
         'installer_filename': 
f'{flavor_with_suffix.lower()}-{version}-{subversion}',
     }
 
-    logger.debug('Created spec %(spec)s', locals())
+    logger.debug(f'Created spec {spec}')
 
     return spec
 
@@ -112,7 +112,7 @@
         if count > 0:
             output_file = out_dir / distribution_specs[0]['installer_filename']
 
-            logger.info('Writing %(count)d specs for %(distribution)s to 
%(output_file)s', locals())
+            logger.info(f'Writing {count} specs for {distribution} to 
{output_file}')
 
             script_str = install_script_fmt.format(
                 install_lines="\n".join([install_line_fmt.format_map(s) for s 
in distribution_specs]),
@@ -122,7 +122,7 @@
             with open(output_file, 'w') as f:
                 f.write(script_str)
         else:
-            logger.info('Did not find specs for %(distribution)s', locals())
+            logger.info(f'Did not find specs for {distribution}')
 
 
 def main():
@@ -132,7 +132,7 @@
         if version in SKIPPED_RELEASES:
             continue
 
-        logger.info('Looking for %(version)s in %(out_dir)s', locals())
+        logger.info(f'Looking for {version} in {out_dir}')
 
         # mambaforge is retired 
https://github.com/conda-forge/miniforge/releases/tag/24.11.2-0
         if version_tuple(version) >= (24, 11, 2):
@@ -141,7 +141,7 @@
             distributions = DISTRIBUTIONS_PRE25
 
         if any(not list(out_dir.glob(f'{distribution}*-{version}')) for 
distribution in distributions):
-            logger.info('Downloading %(version)s', locals())
+            logger.info(f'Downloading {version}')
             add_version(release, distributions)
 
 if __name__ == '__main__':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.10.20 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.10.20
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.10.20    
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.10.20    
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,9 @@
+prefer_openssl3
+export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
+install_package "openssl-3.6.1" 
"https://github.com/openssl/openssl/releases/download/openssl-3.6.1/openssl-3.6.1.tar.gz#b1bfedcd5b289ff22aee87c9d600f515767ebf45f77168cb6d64f231f518a82e";
 mac_openssl --if has_broken_mac_openssl
+install_package "readline-8.3" 
"https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc";
 mac_readline --if has_broken_mac_readline
+if has_tar_xz_support; then
+    install_package "Python-3.10.20" 
"https://www.python.org/ftp/python/3.10.20/Python-3.10.20.tar.xz#de6517421601e39a9a3bc3e1bc4c7b2f239297423ee05e282598c83ec0647505";
 standard verify_py310 copy_python_gdb ensurepip
+else
+    install_package "Python-3.10.20" 
"https://www.python.org/ftp/python/3.10.20/Python-3.10.20.tgz#4ff5fd4c5bab803b935019f3e31d7219cebd6f870d00389cea53b88bbe935d1a";
 standard verify_py310 copy_python_gdb ensurepip
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.11.15 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.11.15
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.11.15    
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.11.15    
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,10 @@
+prefer_openssl3
+export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
+export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
+install_package "openssl-3.6.1" 
"https://github.com/openssl/openssl/releases/download/openssl-3.6.1/openssl-3.6.1.tar.gz#b1bfedcd5b289ff22aee87c9d600f515767ebf45f77168cb6d64f231f518a82e";
 mac_openssl --if has_broken_mac_openssl
+install_package "readline-8.3" 
"https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc";
 mac_readline --if has_broken_mac_readline
+if has_tar_xz_support; then
+    install_package "Python-3.11.15" 
"https://www.python.org/ftp/python/3.11.15/Python-3.11.15.tar.xz#272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625";
 standard verify_py311 copy_python_gdb ensurepip
+else
+    install_package "Python-3.11.15" 
"https://www.python.org/ftp/python/3.11.15/Python-3.11.15.tgz#f4de1b10bd6c70cbb9fa1cd71fc5038b832747a74ee59d599c69ce4846defb50";
 standard verify_py311 copy_python_gdb ensurepip
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.12.13 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.12.13
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.12.13    
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.12.13    
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,10 @@
+prefer_openssl3
+export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
+export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
+install_package "openssl-3.6.1" 
"https://github.com/openssl/openssl/releases/download/openssl-3.6.1/openssl-3.6.1.tar.gz#b1bfedcd5b289ff22aee87c9d600f515767ebf45f77168cb6d64f231f518a82e";
 mac_openssl --if has_broken_mac_openssl
+install_package "readline-8.3" 
"https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc";
 mac_readline --if has_broken_mac_readline
+if has_tar_xz_support; then
+    install_package "Python-3.12.13" 
"https://www.python.org/ftp/python/3.12.13/Python-3.12.13.tar.xz#c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684";
 standard verify_py312 copy_python_gdb ensurepip
+else
+    install_package "Python-3.12.13" 
"https://www.python.org/ftp/python/3.12.13/Python-3.12.13.tgz#0816c4761c97ecdb3f50a3924de0a93fd78cb63ee8e6c04201ddfaedca500b0b";
 standard verify_py312 copy_python_gdb ensurepip
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.11t 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.11t
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.11t   
2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.11t   
1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-export PYTHON_BUILD_FREE_THREADING=1
-source "${BASH_SOURCE[0]%t}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.12 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.12
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.12    
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.12    
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,10 @@
+prefer_openssl3
+export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
+export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
+install_package "openssl-3.6.1" 
"https://github.com/openssl/openssl/releases/download/openssl-3.6.1/openssl-3.6.1.tar.gz#b1bfedcd5b289ff22aee87c9d600f515767ebf45f77168cb6d64f231f518a82e";
 mac_openssl --if has_broken_mac_openssl
+install_package "readline-8.3" 
"https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc";
 mac_readline --if has_broken_mac_readline
+if has_tar_xz_support; then
+    install_package "Python-3.13.12" 
"https://www.python.org/ftp/python/3.13.12/Python-3.13.12.tar.xz#2a84cd31dd8d8ea8aaff75de66fc1b4b0127dd5799aa50a64ae9a313885b4593";
 standard verify_py313 copy_python_gdb ensurepip
+else
+    install_package "Python-3.13.12" 
"https://www.python.org/ftp/python/3.13.12/Python-3.13.12.tgz#12e7cb170ad2d1a69aee96a1cc7fc8de5b1e97a2bdac51683a3db016ec9a2996";
 standard verify_py313 copy_python_gdb ensurepip
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.12t 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.12t
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.12t   
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.12t   
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,2 @@
+export PYTHON_BUILD_FREE_THREADING=1
+source "${BASH_SOURCE[0]%t}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.13 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.13
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.13    
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.13    
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,10 @@
+prefer_openssl3
+export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
+export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
+install_package "openssl-3.6.2" 
"https://github.com/openssl/openssl/releases/download/openssl-3.6.2/openssl-3.6.2.tar.gz#aaf51a1fe064384f811daeaeb4ec4dce7340ec8bd893027eee676af31e83a04f";
 mac_openssl --if has_broken_mac_openssl
+install_package "readline-8.3" 
"https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc";
 mac_readline --if has_broken_mac_readline
+if has_tar_xz_support; then
+    install_package "Python-3.13.13" 
"https://www.python.org/ftp/python/3.13.13/Python-3.13.13.tar.xz#2ab91ff401783ccca64f75d10c882e957bdfd60e2bf5a72f8421793729b78a71";
 standard verify_py313 copy_python_gdb ensurepip
+else
+    install_package "Python-3.13.13" 
"https://www.python.org/ftp/python/3.13.13/Python-3.13.13.tgz#f9cde7b0e2ec8165d7326e2a0f59ea2686ce9d0c617dbbb3d66a7e54d31b74b9";
 standard verify_py313 copy_python_gdb ensurepip
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.13t 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.13t
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.13.13t   
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.13.13t   
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,2 @@
+export PYTHON_BUILD_FREE_THREADING=1
+source "${BASH_SOURCE[0]%t}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.2t 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.2t
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.2t    
2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.2t    
1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-export PYTHON_BUILD_FREE_THREADING=1
-source "${BASH_SOURCE[0]%t}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.3 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.3
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.3     
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.3     
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,10 @@
+prefer_openssl3
+export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
+export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
+install_package "openssl-3.6.1" 
"https://github.com/openssl/openssl/releases/download/openssl-3.6.1/openssl-3.6.1.tar.gz#b1bfedcd5b289ff22aee87c9d600f515767ebf45f77168cb6d64f231f518a82e";
 mac_openssl --if has_broken_mac_openssl
+install_package "readline-8.3" 
"https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc";
 mac_readline --if has_broken_mac_readline
+if has_tar_xz_support; then
+    install_package "Python-3.14.3" 
"https://www.python.org/ftp/python/3.14.3/Python-3.14.3.tar.xz#a97d5549e9ad81fe17159ed02c68774ad5d266c72f8d9a0b5a9c371fe85d902b";
 standard verify_py314 copy_python_gdb ensurepip
+else
+    install_package "Python-3.14.3" 
"https://www.python.org/ftp/python/3.14.3/Python-3.14.3.tgz#d7fe130d0501ae047ca318fa92aa642603ab6f217901015a1df6ce650d5470cd";
 standard verify_py314 copy_python_gdb ensurepip
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.3t 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.3t
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.3t    
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.3t    
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,2 @@
+export PYTHON_BUILD_FREE_THREADING=1
+source "${BASH_SOURCE[0]%t}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.4 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.4
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.4     
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.4     
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,10 @@
+prefer_openssl3
+export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
+export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
+install_package "openssl-3.6.2" 
"https://github.com/openssl/openssl/releases/download/openssl-3.6.2/openssl-3.6.2.tar.gz#aaf51a1fe064384f811daeaeb4ec4dce7340ec8bd893027eee676af31e83a04f";
 mac_openssl --if has_broken_mac_openssl
+install_package "readline-8.3" 
"https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc";
 mac_readline --if has_broken_mac_readline
+if has_tar_xz_support; then
+    install_package "Python-3.14.4" 
"https://www.python.org/ftp/python/3.14.4/Python-3.14.4.tar.xz#d923c51303e38e249136fc1bdf3568d56ecb03214efdef48516176d3d7faaef8";
 standard verify_py314 copy_python_gdb ensurepip
+else
+    install_package "Python-3.14.4" 
"https://www.python.org/ftp/python/3.14.4/Python-3.14.4.tgz#b4c059d5895f030e7df9663894ce3732bfa1b32cd3ab2883980266a45ce3cb3b";
 standard verify_py314 copy_python_gdb ensurepip
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.4t 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.4t
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.14.4t    
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.14.4t    
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,2 @@
+export PYTHON_BUILD_FREE_THREADING=1
+source "${BASH_SOURCE[0]%t}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.15.0a3 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.15.0a3
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.15.0a3   
2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.15.0a3   
1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-prefer_openssl3
-export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
-export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
-install_package "openssl-3.6.0" 
"https://github.com/openssl/openssl/releases/download/openssl-3.6.0/openssl-3.6.0.tar.gz#b6a5f44b7eb69e3fa35dbf15524405b44837a481d43d81daddde3ff21fcbb8e9";
 mac_openssl --if has_broken_mac_openssl
-install_package "readline-8.3" 
"https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc";
 mac_readline --if has_broken_mac_readline
-if has_tar_xz_support; then
-    install_package "Python-3.15.0a3" 
"https://www.python.org/ftp/python/3.15.0/Python-3.15.0a3.tar.xz#6ab02cdac24505779877bb1d9189432d67e90ddf2a9b8b7b373ead54ac07b607";
 standard verify_py315 copy_python_gdb ensurepip
-else
-    install_package "Python-3.15.0a3" 
"https://www.python.org/ftp/python/3.15.0/Python-3.15.0a3.tgz#a8afd71361baf8f02f459a4ab9b73eb4cdf2895991218b8418cf7ba49c96bef7";
 standard verify_py315 copy_python_gdb ensurepip
-fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.15.0a3t 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.15.0a3t
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.15.0a3t  
2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.15.0a3t  
1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-export PYTHON_BUILD_FREE_THREADING=1
-source "${BASH_SOURCE[0]%t}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.15.0a8 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.15.0a8
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.15.0a8   
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.15.0a8   
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,10 @@
+prefer_openssl3
+export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
+export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
+install_package "openssl-3.6.2" 
"https://github.com/openssl/openssl/releases/download/openssl-3.6.2/openssl-3.6.2.tar.gz#aaf51a1fe064384f811daeaeb4ec4dce7340ec8bd893027eee676af31e83a04f";
 mac_openssl --if has_broken_mac_openssl
+install_package "readline-8.3" 
"https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc";
 mac_readline --if has_broken_mac_readline
+if has_tar_xz_support; then
+    install_package "Python-3.15.0a8" 
"https://www.python.org/ftp/python/3.15.0/Python-3.15.0a8.tar.xz#28f1b6358609042ebcc81488ec24569519f50804bb07dc23cc707b281b031c69";
 standard verify_py315 copy_python_gdb ensurepip
+else
+    install_package "Python-3.15.0a8" 
"https://www.python.org/ftp/python/3.15.0/Python-3.15.0a8.tgz#1aadddd942e7c80e92fd2d83ab36887cec860c48fa9a2b47efe8c5acaa4a29f3";
 standard verify_py315 copy_python_gdb ensurepip
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/3.15.0a8t 
new/pyenv-2.6.27/plugins/python-build/share/python-build/3.15.0a8t
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/3.15.0a8t  
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/3.15.0a8t  
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,2 @@
+export PYTHON_BUILD_FREE_THREADING=1
+source "${BASH_SOURCE[0]%t}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/anaconda3-2025.12-2 
new/pyenv-2.6.27/plugins/python-build/share/python-build/anaconda3-2025.12-2
--- 
old/pyenv-2.6.18/plugins/python-build/share/python-build/anaconda3-2025.12-2    
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyenv-2.6.27/plugins/python-build/share/python-build/anaconda3-2025.12-2    
    2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,19 @@
+case "$(anaconda_architecture 2>/dev/null || true)" in
+"Linux-aarch64" )
+  install_script "Anaconda3-2025.12-2-Linux-aarch64" 
"https://repo.anaconda.com/archive/Anaconda3-2025.12-2-Linux-aarch64.sh#be13a20f31d82508a061984fa3555369cfd8e4692643721415c19e7dc2e9e0f9";
 "anaconda" verify_py313
+  ;;
+"Linux-x86_64" )
+  install_script "Anaconda3-2025.12-2-Linux-x86_64" 
"https://repo.anaconda.com/archive/Anaconda3-2025.12-2-Linux-x86_64.sh#57b2b48cc5b8665e25fce7011f0389d47c1288288007844b3b1ba482d4f39029";
 "anaconda" verify_py313
+  ;;
+"MacOSX-arm64" )
+  install_script "Anaconda3-2025.12-2-MacOSX-arm64" 
"https://repo.anaconda.com/archive/Anaconda3-2025.12-2-MacOSX-arm64.sh#8d0b858358456d4ee159feb0c4ee6d635590b777f8b9ffa4aa7553c469aae2b6";
 "anaconda" verify_py313
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": The binary distribution of Anaconda is not available for 
$(anaconda_architecture 2>/dev/null || true)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/graalpy-25.0.2 
new/pyenv-2.6.27/plugins/python-build/share/python-build/graalpy-25.0.2
--- old/pyenv-2.6.18/plugins/python-build/share/python-build/graalpy-25.0.2     
1970-01-01 01:00:00.000000000 +0100
+++ new/pyenv-2.6.27/plugins/python-build/share/python-build/graalpy-25.0.2     
2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,61 @@
+# Copyright (c) 2026, Oracle and/or its affiliates. All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy 
of
+# this software and associated documentation files (the "Software"), to deal in
+# the Software without restriction, including without limitation the rights to
+# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+# of the Software, and to permit persons to whom the Software is furnished to 
do
+# so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in 
all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+VERSION='25.0.2'
+BUILD=''
+
+colorize 1 "GraalPy 23.1 and later installed by python-build use the faster 
Oracle GraalVM distribution" && echo
+colorize 1 "Oracle GraalVM uses the GFTC license, which is free for 
development and production use, see https://medium.com/graalvm/161527df3d76"; && 
echo
+colorize 1 "The GraalVM Community Edition variant of GraalPy is also 
available, under the name graalpy-community-${VERSION}" && echo
+
+
+graalpy_arch="$(graalpy_architecture 2>/dev/null || true)"
+
+case "$graalpy_arch" in
+"linux-amd64" )
+  checksum="8967e4bae1c5040d62dbc98976f2099d5c36c00a79944e99b848d455e618ecdf"
+  ;;
+"linux-aarch64" )
+  checksum="805f3526296e04692b27ca001ba97674e53d0f036412d9ffc29aeb8b51517ab6"
+  ;;
+"macos-aarch64" )
+  checksum="c771688b8636932026180bdd9b5e3d6116316fa868faf7e602a60ba020c7bade"
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": No binary distribution of GraalPy is available for $(uname -sm)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
+
+if [ -n "${BUILD}" ]; then
+  { echo
+    colorize 1 "ERROR"
+    echo "Oracle GraalPy currently doesn't provide snapshot builds. Use 
graalpy-community if you need snapshots."
+    echo
+  } >&2
+  exit 1
+fi
+
+url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-${VERSION}-${graalpy_arch}.tar.gz#${checksum}";
+
+install_package "graalpy-${VERSION}" "${url}" "copy" ensurepip
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/graalpy-community-25.0.2
 
new/pyenv-2.6.27/plugins/python-build/share/python-build/graalpy-community-25.0.2
--- 
old/pyenv-2.6.18/plugins/python-build/share/python-build/graalpy-community-25.0.2
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyenv-2.6.27/plugins/python-build/share/python-build/graalpy-community-25.0.2
   2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,51 @@
+# Copyright (c) 2026, Oracle and/or its affiliates. All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy 
of
+# this software and associated documentation files (the "Software"), to deal in
+# the Software without restriction, including without limitation the rights to
+# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+# of the Software, and to permit persons to whom the Software is furnished to 
do
+# so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in 
all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+VERSION='25.0.2'
+BUILD=''
+
+graalpy_arch="$(graalpy_architecture 2>/dev/null || true)"
+
+case "$graalpy_arch" in
+"linux-amd64" )
+  checksum="8db86f13c0b701bab0780e8821052a40303c08b83fdc9c21da06605d14d4cc79"
+  ;;
+"linux-aarch64" )
+  checksum="98f7b9dea867c45cde5c2886b7544bd267242b2fa93586f2c9d3d38e88d5d109"
+  ;;
+"macos-aarch64" )
+  checksum="c64bef17f34d42327d5c3fe40c05eddf791c3653cc8366f6bf1149b51ce9d517"
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": No binary distribution of GraalPy is available for $(uname -sm)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
+
+if [ -n "${BUILD}" ]; then
+  
url="https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/${VERSION}-dev-${BUILD}/graalpy-community-dev-${graalpy_arch}.tar.gz";
+else
+  
url="https://github.com/oracle/graalpython/releases/download/graal-${VERSION}/graalpy-community-${VERSION}-${graalpy_arch}.tar.gz#${checksum}";
+fi
+
+install_package "graalpy-community-${VERSION}${BUILD}" "${url}" "copy" 
ensurepip
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniconda3-3.10-26.1.1-1
 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniconda3-3.10-26.1.1-1
--- 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniconda3-3.10-26.1.1-1
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniconda3-3.10-26.1.1-1
   2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,20 @@
+export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
+case "$(anaconda_architecture 2>/dev/null || true)" in
+"Linux-aarch64" )
+  install_script "Miniconda3-py310_26.1.1-1-Linux-aarch64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py310_26.1.1-1-Linux-aarch64.sh#0a78d6620113acd42d840925514c0f5eec9f2e1e8ae4394755c401b3b605875b";
 "miniconda" verify_py310
+  ;;
+"Linux-x86_64" )
+  install_script "Miniconda3-py310_26.1.1-1-Linux-x86_64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py310_26.1.1-1-Linux-x86_64.sh#4410410a6343f688bbfd48d80eb23e3125964e254e4c18802679d2e61b06876e";
 "miniconda" verify_py310
+  ;;
+"MacOSX-arm64" )
+  install_script "Miniconda3-py310_26.1.1-1-MacOSX-arm64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py310_26.1.1-1-MacOSX-arm64.sh#cadb31098a13b7dcc016594f54b01bcf1371161ba762a9ac3ba0d8f04b2615e2";
 "miniconda" verify_py310
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": The binary distribution of Miniconda is not available for 
$(anaconda_architecture 2>/dev/null || true)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniconda3-3.11-26.1.1-1
 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniconda3-3.11-26.1.1-1
--- 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniconda3-3.11-26.1.1-1
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniconda3-3.11-26.1.1-1
   2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,20 @@
+export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
+case "$(anaconda_architecture 2>/dev/null || true)" in
+"Linux-aarch64" )
+  install_script "Miniconda3-py311_26.1.1-1-Linux-aarch64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py311_26.1.1-1-Linux-aarch64.sh#1726ea55308160a32e82d90a6f4914caa46f58fe157442224f2faf92fdef1e0e";
 "miniconda" verify_py311
+  ;;
+"Linux-x86_64" )
+  install_script "Miniconda3-py311_26.1.1-1-Linux-x86_64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py311_26.1.1-1-Linux-x86_64.sh#52d1f19154b0716d7dc0872f0d858702640da08a4e53fd0035ba988608203d6b";
 "miniconda" verify_py311
+  ;;
+"MacOSX-arm64" )
+  install_script "Miniconda3-py311_26.1.1-1-MacOSX-arm64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py311_26.1.1-1-MacOSX-arm64.sh#720266b29d46b8da1b466342aa02d7d04683670bf2bf53576cc70d89253f60ca";
 "miniconda" verify_py311
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": The binary distribution of Miniconda is not available for 
$(anaconda_architecture 2>/dev/null || true)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniconda3-3.12-26.1.1-1
 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniconda3-3.12-26.1.1-1
--- 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniconda3-3.12-26.1.1-1
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniconda3-3.12-26.1.1-1
   2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,20 @@
+export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
+case "$(anaconda_architecture 2>/dev/null || true)" in
+"Linux-aarch64" )
+  install_script "Miniconda3-py312_26.1.1-1-Linux-aarch64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py312_26.1.1-1-Linux-aarch64.sh#0a84d50ec92fbb248e31bff0a5888bf2f4dc322fc979e94ecc6e9946d0324ce7";
 "miniconda" verify_py312
+  ;;
+"Linux-x86_64" )
+  install_script "Miniconda3-py312_26.1.1-1-Linux-x86_64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py312_26.1.1-1-Linux-x86_64.sh#eef1283cdc9d37f55743778ea4567e91aa28c2e3be4adab529dda324c3c897a2";
 "miniconda" verify_py312
+  ;;
+"MacOSX-arm64" )
+  install_script "Miniconda3-py312_26.1.1-1-MacOSX-arm64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py312_26.1.1-1-MacOSX-arm64.sh#4a1e3630353121edad84fe79982a99ad8001425e27313c34f7ba9b6cec95d3dd";
 "miniconda" verify_py312
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": The binary distribution of Miniconda is not available for 
$(anaconda_architecture 2>/dev/null || true)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniconda3-3.13-26.1.1-1
 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniconda3-3.13-26.1.1-1
--- 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniconda3-3.13-26.1.1-1
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniconda3-3.13-26.1.1-1
   2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,20 @@
+export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
+case "$(anaconda_architecture 2>/dev/null || true)" in
+"Linux-aarch64" )
+  install_script "Miniconda3-py313_26.1.1-1-Linux-aarch64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py313_26.1.1-1-Linux-aarch64.sh#07c82b5aec04d5f0f3e4b246835b6bc85e104821cbcb0a059c7ea80f028503f4";
 "miniconda" verify_py313
+  ;;
+"Linux-x86_64" )
+  install_script "Miniconda3-py313_26.1.1-1-Linux-x86_64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py313_26.1.1-1-Linux-x86_64.sh#f6dfb5b59614fd7b2956b240b2575a9d58203ec7f7a99f85128158a0fdc5c1d7";
 "miniconda" verify_py313
+  ;;
+"MacOSX-arm64" )
+  install_script "Miniconda3-py313_26.1.1-1-MacOSX-arm64" 
"https://repo.anaconda.com/miniconda/Miniconda3-py313_26.1.1-1-MacOSX-arm64.sh#745f97a6553ebdce0bfdaafe00b0d1939784b38cdaadb3378ca7868a51616a65";
 "miniconda" verify_py313
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": The binary distribution of Miniconda is not available for 
$(anaconda_architecture 2>/dev/null || true)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniforge3-26.1.0-0 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniforge3-26.1.0-0
--- 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniforge3-26.1.0-0    
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniforge3-26.1.0-0    
    2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,25 @@
+case "$(anaconda_architecture 2>/dev/null || true)" in
+"Linux-aarch64" )
+  install_script "Miniforge3-26.1.0-0-Linux-aarch64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.0-0/Miniforge3-26.1.0-0-Linux-aarch64.sh#8baf8844ecf13e1458f81659ea286251d04b2d5ed90040efb77f158adedb2d95";
 "miniconda" verify_py312
+  ;;
+"Linux-ppc64le" )
+  install_script "Miniforge3-26.1.0-0-Linux-ppc64le.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.0-0/Miniforge3-26.1.0-0-Linux-ppc64le.sh#902190ad825b74b78a6a2816364453bb4d6989a599172aa3785d4afd0ebeb917";
 "miniconda" verify_py312
+  ;;
+"Linux-x86_64" )
+  install_script "Miniforge3-26.1.0-0-Linux-x86_64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.0-0/Miniforge3-26.1.0-0-Linux-x86_64.sh#127b5e14cfe6c83b787f624487cdc2168645ed82fdca1b0c1937caa086aed6d5";
 "miniconda" verify_py312
+  ;;
+"MacOSX-arm64" )
+  install_script "Miniforge3-26.1.0-0-MacOSX-arm64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.0-0/Miniforge3-26.1.0-0-MacOSX-arm64.sh#219b9e0d733fa2086d7d094a5ed830db146ccf22ae32c330b2da5df5c9604b78";
 "miniconda" verify_py312
+  ;;
+"MacOSX-x86_64" )
+  install_script "Miniforge3-26.1.0-0-MacOSX-x86_64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.0-0/Miniforge3-26.1.0-0-MacOSX-x86_64.sh#90a41a28ad0221fbaf728ca1267f6243638a56c579fba8a1b970edfee4062d53";
 "miniconda" verify_py312
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": The binary distribution of Miniforge is not available for 
$(anaconda_architecture 2>/dev/null || true)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniforge3-26.1.1-2 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniforge3-26.1.1-2
--- 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniforge3-26.1.1-2    
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniforge3-26.1.1-2    
    2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,31 @@
+case "$(anaconda_architecture 2>/dev/null || true)" in
+"Linux-aarch64" )
+  install_script "Miniforge3-26.1.1-2-Linux-aarch64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-2/Miniforge3-26.1.1-2-Linux-aarch64.sh#6525bfb24940c5e063ed14f2d840968b0fc4152a3f4edd253b7a1049a15656e7";
 "miniconda" verify_py312
+  ;;
+"Linux-ppc64le" )
+  install_script "Miniforge3-26.1.1-2-Linux-ppc64le.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-2/Miniforge3-26.1.1-2-Linux-ppc64le.sh#637cf03310343d199bcd7725aab54f59666fb1694bb99fc841973203da9c3f25";
 "miniconda" verify_py312
+  ;;
+"Linux-x86_64" )
+  install_script "Miniforge3-26.1.1-2-Linux-x86_64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-2/Miniforge3-26.1.1-2-Linux-x86_64.sh#831421c1f32d8b510e0ef7f261aaabdbf567bdbba37373432d492621b824ab1f";
 "miniconda" verify_py312
+  ;;
+"MacOSX-arm64.pkg" )
+  install_script "Miniforge3-26.1.1-2-MacOSX-arm64.pkg" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-2/Miniforge3-26.1.1-2-MacOSX-arm64.pkg#2cf96ab02ab575028bfe2c0d0f8ee8e7c39953588042189507d8f99c53971baf";
 "miniconda" verify_py312
+  ;;
+"MacOSX-arm64" )
+  install_script "Miniforge3-26.1.1-2-MacOSX-arm64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-2/Miniforge3-26.1.1-2-MacOSX-arm64.sh#ed60de20689ab24dd646b9ec4b06762d35f8c0043026778699ba7c9f0816492c";
 "miniconda" verify_py312
+  ;;
+"MacOSX-x86_64.pkg" )
+  install_script "Miniforge3-26.1.1-2-MacOSX-x86_64.pkg" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-2/Miniforge3-26.1.1-2-MacOSX-x86_64.pkg#5b7e555b22515debaf049b7cfe0eec73e0c8dc71ea1ba773b7132c852277aa72";
 "miniconda" verify_py312
+  ;;
+"MacOSX-x86_64" )
+  install_script "Miniforge3-26.1.1-2-MacOSX-x86_64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-2/Miniforge3-26.1.1-2-MacOSX-x86_64.sh#74f3e5cdb70bf0ff9bab3e4ba8d35aee5b46bf7eebca94202cbd8d46e16ecf77";
 "miniconda" verify_py312
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": The binary distribution of Miniforge is not available for 
$(anaconda_architecture 2>/dev/null || true)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniforge3-26.1.1-3 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniforge3-26.1.1-3
--- 
old/pyenv-2.6.18/plugins/python-build/share/python-build/miniforge3-26.1.1-3    
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyenv-2.6.27/plugins/python-build/share/python-build/miniforge3-26.1.1-3    
    2026-04-08 17:26:46.000000000 +0200
@@ -0,0 +1,31 @@
+case "$(anaconda_architecture 2>/dev/null || true)" in
+"Linux-aarch64" )
+  install_script "Miniforge3-26.1.1-3-Linux-aarch64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-3/Miniforge3-26.1.1-3-Linux-aarch64.sh#83280e4ee71a5bd547d6b318f96e9ababe1054911ff6cc2b8801ce5493fe67e5";
 "miniconda" verify_py312
+  ;;
+"Linux-ppc64le" )
+  install_script "Miniforge3-26.1.1-3-Linux-ppc64le.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-3/Miniforge3-26.1.1-3-Linux-ppc64le.sh#5711fd69219bc9746389ef751ee4c2549d40d9b1626a0ea93cc63db1a739eee6";
 "miniconda" verify_py312
+  ;;
+"Linux-x86_64" )
+  install_script "Miniforge3-26.1.1-3-Linux-x86_64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-3/Miniforge3-26.1.1-3-Linux-x86_64.sh#b25b828b702df4dd2a6d24d4eb56cfa912471dd8e3342cde2c3d86fe3dc2d870";
 "miniconda" verify_py312
+  ;;
+"MacOSX-arm64.pkg" )
+  install_script "Miniforge3-26.1.1-3-MacOSX-arm64.pkg" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-3/Miniforge3-26.1.1-3-MacOSX-arm64.pkg#864d4ba41bae5ad85d41d00a163535ea4b8b1ab7a4fd3b03f875c36c0c323b80";
 "miniconda" verify_py312
+  ;;
+"MacOSX-arm64" )
+  install_script "Miniforge3-26.1.1-3-MacOSX-arm64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-3/Miniforge3-26.1.1-3-MacOSX-arm64.sh#38e73713bc504e11cf2a70f8bc01de4a778c547e9191e682606ba76fa4397fd9";
 "miniconda" verify_py312
+  ;;
+"MacOSX-x86_64.pkg" )
+  install_script "Miniforge3-26.1.1-3-MacOSX-x86_64.pkg" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-3/Miniforge3-26.1.1-3-MacOSX-x86_64.pkg#34cb544a2473f2b4755bdd361520114f20a61284bcdf3c2b124a392a1aa9923f";
 "miniconda" verify_py312
+  ;;
+"MacOSX-x86_64" )
+  install_script "Miniforge3-26.1.1-3-MacOSX-x86_64.sh" 
"https://github.com/conda-forge/miniforge/releases/download/26.1.1-3/Miniforge3-26.1.1-3-MacOSX-x86_64.sh#d81e77d8f3c104c64e0ab27256f901e58ac9965288ccec774db87bf1a98a03e7";
 "miniconda" verify_py312
+  ;;
+* )
+  { echo
+    colorize 1 "ERROR"
+    echo ": The binary distribution of Miniforge is not available for 
$(anaconda_architecture 2>/dev/null || true)."
+    echo
+  } >&2
+  exit 1
+  ;;
+esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/pyenv.d/rehash/source.bash 
new/pyenv-2.6.27/pyenv.d/rehash/source.bash
--- old/pyenv-2.6.18/pyenv.d/rehash/source.bash 2026-01-10 04:16:21.000000000 
+0100
+++ new/pyenv-2.6.27/pyenv.d/rehash/source.bash 2026-04-08 17:26:46.000000000 
+0200
@@ -2,7 +2,7 @@
 
 shims=()
 shopt -s nullglob
-for shim in $(cat "${BASH_SOURCE%/*}/source.d/"*".list" | sort | uniq | sed -e 
's/#.*$//' | sed -e '/^[[:space:]]*$/d'); do
+for shim in $(sort -u "${BASH_SOURCE%/*}/source.d/"*".list" | sed -e 
's/#.*$//' -e '/^[[:space:]]*$/d'); do
   if [ -n "${shim##*/}" ]; then
     shims[${#shims[*]}]="${shim})return 0;;"
   fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/test/test_helper.bash 
new/pyenv-2.6.27/test/test_helper.bash
--- old/pyenv-2.6.18/test/test_helper.bash      2026-01-10 04:16:21.000000000 
+0100
+++ new/pyenv-2.6.27/test/test_helper.bash      2026-04-08 17:26:46.000000000 
+0200
@@ -135,7 +135,7 @@
       if [ "$found" != "${PYENV_ROOT}/shims" ]; then
         alt="${PYENV_TEST_DIR}/$(echo "${found#/}" | tr '/' '-')"
         mkdir -p "$alt"
-        for util in bash head cut readlink greadlink tr sed; do
+        for util in bash head cut readlink greadlink tr sed xargs basename 
sort; do
           if [ -x "${found}/$util" ]; then
             ln -s "${found}/$util" "${alt}/$util"
           fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/test/versions.bats 
new/pyenv-2.6.27/test/versions.bats
--- old/pyenv-2.6.18/test/versions.bats 2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/test/versions.bats 2026-04-08 17:26:46.000000000 +0200
@@ -11,6 +11,11 @@
   ln -s "$2" "${PYENV_ROOT}/versions/$1"
 }
 
+create_external_version() {
+  mkdir -p "$PYENV_TEST_DIR/${1:?}"
+  create_alias "${1:?}" "$PYENV_TEST_DIR/${1:?}"
+}
+
 _setup() {
   mkdir -p "$PYENV_TEST_DIR"
   cd "$PYENV_TEST_DIR"
@@ -168,15 +173,39 @@
 @test "doesn't list symlink aliases when --skip-aliases" {
   create_version "1.8.7"
   create_alias "1.8" "1.8.7"
-  mkdir moo
-  create_alias "1.9" "${PWD}/moo"
+  create_external_version "moo"
 
   run pyenv-versions --bare --skip-aliases
   assert_success
 
   assert_output <<OUT
 1.8.7
-1.9
+moo
+OUT
+}
+
+@test "--executables lists executables everywhere and overrides other 
switches" {
+  create_alt_executable_in_version "3.5.0" "python"
+  create_alt_executable_in_version "3.5.0" "python1"
+  create_alt_executable_in_version "3.6.0" "python"
+  create_alt_executable_in_version "3.5.0/envs/foo" "python_foo"
+  create_alt_executable_in_version "3.6.0/envs/bar" "python_bar"
+  create_alias "bar" "3.6.0/envs/bar"
+  create_external_version "moo"
+  create_alt_executable_in_version "moo" "moopython"
+
+  run pyenv-versions --skip-aliases --skip-envs --executables
+  assert_success
+  #The sort order does not matter for this functionality. However,
+  #MacOS 15 `sort` sorts differently that Linux's due to a different 
LC_COLLATE definition for en-US:
+  
#https://unix.stackexchange.com/questions/362728/why-does-gnu-sort-sort-differently-on-my-osx-machine-and-linux-machine
+  #So to get a match, we have to check against the same order that the local 
`sort` produces
+  sort <<OUT | assert_output
+moopython
+python
+python1
+python_bar
+python_foo
 OUT
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyenv-2.6.18/test/which.bats 
new/pyenv-2.6.27/test/which.bats
--- old/pyenv-2.6.18/test/which.bats    2026-01-10 04:16:21.000000000 +0100
+++ new/pyenv-2.6.27/test/which.bats    2026-04-08 17:26:46.000000000 +0200
@@ -68,8 +68,8 @@
 The \`py.test' command exists in these Python versions:
   3.4
 
- Note: See 'pyenv help global' for tips on allowing both
-       python2 and python3 to be found.
+Note: See 'pyenv help global' for tips on allowing multiple
+      Python versions to be found at the same time.
 OUT
 }
 
@@ -85,8 +85,8 @@
 The \`py.test' command exists in these Python versions:
   3.4
 
- Note: See 'pyenv help global' for tips on allowing both
-       python2 and python3 to be found.
+Note: See 'pyenv help global' for tips on allowing multiple
+      Python versions to be found at the same time.
 OUT
 }
 
@@ -118,8 +118,8 @@
   3.3
   3.4
 
-Note: See 'pyenv help global' for tips on allowing both
-      python2 and python3 to be found.
+Note: See 'pyenv help global' for tips on allowing multiple
+      Python versions to be found at the same time.
 OUT
 }
 

Reply via email to