1
0
mirror of https://github.com/pyenv/pyenv.git synced 2025-11-08 11:33:49 -05:00

Compare commits

...

25 Commits

Author SHA1 Message Date
Anton Petrov
e79dd97afa v2.3.19 2023-06-08 12:18:16 +03:00
Anton Petrov
021b6c2da0 v2.3.19 2023-06-08 12:17:52 +03:00
Anton Petrov
e008430451 Merge pull request #2713 from edgarrmondragon/cpython-3.12.0b2
Add CPython 3.12.0b2
2023-06-07 14:47:56 +03:00
Anton Petrov
09fc5b8824 Merge pull request #2714 from edgarrmondragon/cpython-3.10.12
Add CPython 3.10.12
2023-06-07 14:47:10 +03:00
Anton Petrov
6eeda1f87e Merge pull request #2715 from edgarrmondragon/cpython-3.11.4
Add CPython 3.11.4
2023-06-07 14:46:34 +03:00
Edgar Ramírez Mondragón
452647ab33 Add CPython 3.11.4 2023-06-07 01:12:47 -06:00
Edgar Ramírez Mondragón
4086e452fd Add CPython 3.10.12 2023-06-06 18:26:24 -06:00
Edgar Ramírez Mondragón
82c8d511c4 Add CPython 3.12.0b2 2023-06-06 14:39:15 -06:00
native-api
578c7507c6 Merge pull request #2711 from edgarrmondragon/cpython-3.9.17
Add CPython 3.7.17, 3.8.17 and 3.9.17
2023-06-06 20:04:06 +03:00
Edgar Ramírez Mondragón
23c727a767 Add CPython 3.7.17 and CPython 3.8.17 2023-06-06 10:39:56 -06:00
Edgar Ramírez Mondragón
fb73c4b714 Add CPython 3.9.17 2023-06-06 09:19:19 -06:00
Anton Petrov
3fa5812bfc Update pyenv---version 2023-05-25 11:23:39 +03:00
Anton Petrov
c8a23e26e6 Update CHANGELOG.md 2023-05-25 11:23:18 +03:00
t0b3
def5cd994e Update 3.12-dev and add 3.13-dev (#2703) 2023-05-25 09:47:37 +03:00
Edgar R. M
b5576240a2 Add CPython 3.12.0b1 (#2701) 2023-05-23 23:07:48 +03:00
Kevin Schoedel
920ef1456a Support ksh alternative names (#2697)
* Support ksh versions

Korn shell had two major versions: ’88 and ’93. Some systems have
ksh installed under the name `ksh93`. A few systems (maybe only
Solaris now) also have a `ksh88`. A few others use the `pdksh` (’88)
or `mksh` (’93) implementations, originated before ksh was open source.

Limit to currently-used versions

---------

Co-authored-by: Kevin Schoedel <kps@datatravelandexperiments.com>
2023-05-13 01:24:57 +03:00
Anton Petrov
528d10e96f Merge pull request #2691 from aviadhahami/master
fix: updating heredoc delimiter to be random and unique
2023-04-30 08:16:28 +03:00
Aviad Hahami
cf9d0dcd7b fix: updating heredoc delimiter to be random and unique 2023-04-30 00:56:43 +03:00
Anton Petrov
aa5fd27e2f Merge pull request #2687 from tomschr/bug2682-fix-manpage
Fix #2682: Correct pyenv_user_setup.bash file
2023-04-25 07:39:39 +03:00
Tom Schraitle
73b6307399 Fix #2682: Correct pyenv_user_setup.bash file
The manpage contains a reference to a file which does
only exist on Debian (/usr/share/pyenv/pyenv_user_setup.bash).

It is replaced by its content to make it usable for
other distributions.
2023-04-24 13:56:01 +02:00
Ivan Pozdeev
a57e0b5019 README: move troubleshooting note higher 2023-04-16 20:11:08 +03:00
Anton Petrov
b3c91b37d6 Merge pull request #2677 from mirekdlugosz/fix-31011-3113-tarxz
Correct link in has_tar_xz_support else branch of 3.10.11 and 3.11.3
2023-04-11 11:00:40 +03:00
Mirek Długosz
777089466d Correct link in has_tar_xz_support else branch of 3.10.11 and 3.11.3 2023-04-11 09:15:16 +02:00
native-api
20189ff06f Fix not showing symlink contents for unselected versions in pyenv versions (#2675) 2023-04-08 01:12:09 +03:00
Ivan Pozdeev
5a8dbcf143 Document using and writing plugins 2023-04-07 19:07:35 +03:00
19 changed files with 129 additions and 23 deletions

View File

@@ -15,7 +15,10 @@ jobs:
if (/^plugins\/python-build\/share\/python-build\/(?:([^\/]+)|patches\/([^\/]+)\/.*)$/ and -e $& )
{ print $1.$2; }' \
| sort -u);
echo -e "versions<<!\\n$versions\\n!" >> $GITHUB_ENV
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64);
echo "versions<<$EOF" >> $GITHUB_ENV;
echo "$versions" >> $GITHUB_ENV;
echo "$EOF" >> $GITHUB_ENV;
- id: modified-versions
run: |
echo -n "::set-output name=versions::"

View File

@@ -1,5 +1,22 @@
# Version History
## Release v2.3.19
* Add CPython 3.7.17, 3.8.17 and 3.9.17 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2711
* Add CPython 3.11.4 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2715
* Add CPython 3.10.12 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2714
* Add CPython 3.12.0b2 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2713
## Release 2.3.18
* Fix not showing symlink contents for unselected versions in `pyenv versions` by @native-api in https://github.com/pyenv/pyenv/pull/2675
* Correct link in has_tar_xz_support else branch of 3.10.11 and 3.11.3 by @mirekdlugosz in https://github.com/pyenv/pyenv/pull/2677
* Fix #2682: Correct pyenv_user_setup.bash file by @tomschr in https://github.com/pyenv/pyenv/pull/2687
* fix: updating heredoc delimiter to be random and unique by @aviadhahami in https://github.com/pyenv/pyenv/pull/2691
* Support ksh alternative names by @kpschoedel in https://github.com/pyenv/pyenv/pull/2697
* Add CPython 3.12.0b1 by @edgarrmondragon in https://github.com/pyenv/pyenv/pull/2701
* Update 3.12-dev and add 3.13-dev by @t0b3 in https://github.com/pyenv/pyenv/pull/2703
## Release 2.3.17
* Try locate `readlink` first in pyenv-hooks, fix #2654 by @Harry-Chen in https://github.com/pyenv/pyenv/pull/2655

View File

@@ -62,6 +62,7 @@ This project was forked from [rbenv](https://github.com/rbenv/rbenv) and
* [Upgrading with Homebrew](#upgrading-with-homebrew)
* [Upgrading with Installer or Git checkout](#upgrading-with-installer-or-git-checkout)
* [Uninstalling pyenv](#uninstalling-pyenv)
* [Pyenv plugins](#pyenv-plugins)
* [Advanced Configuration](#advanced-configuration)
* [Using Pyenv without shims](#using-pyenv-without-shims)
* [Environment variables](#environment-variables)
@@ -401,15 +402,15 @@ You can pass options to Python's `configure` and compiler flags to customize the
see [_Special environment variables_ in Python-Build's README](plugins/python-build/README.md#special-environment-variables)
for details.
**NOTE:** If you'd like a faster interpreter at the cost of longer build times,
see [_Building for maximum performance_ in Python-Build's README](plugins/python-build/README.md#building-for-maximum-performance).
**NOTE:** If you are having trouble installing a Python version,
please visit the wiki page about
[Common Build Problems](https://github.com/pyenv/pyenv/wiki/Common-build-problems).
**NOTE:** If you want to use proxy for download, please set the `http_proxy` and `https_proxy`
environment variables.
**NOTE:** If you are having trouble installing a Python version,
please visit the wiki page about
[Common Build Problems](https://github.com/pyenv/pyenv/wiki/Common-build-problems).
**NOTE:** If you'd like a faster interpreter at the cost of longer build times,
see [_Building for maximum performance_ in Python-Build's README](plugins/python-build/README.md#building-for-maximum-performance).
#### Prefix auto-resolution to the latest version
@@ -567,6 +568,19 @@ uninstall from the system.
brew uninstall pyenv
```
## Pyenv plugins
Pyenv provides a simple, flexible and maintainable way to extend and customize its functionalty with plugins --
as simple as creating a plugin directory and dropping a shell script on a certain subpath of it
with whatever extra logic you need to be run at certain moments.
See [_Plugins_ on the wiki](https://github.com/pyenv/pyenv/wiki/Plugins) on how to install and use plugins
as well as a catalog of some useful existing plugins for common needs.
See [_Authoring plugins_ on the wiki](https://github.com/pyenv/pyenv/wiki/Authoring-plugins) on writing your own plugins.
## Advanced Configuration
Skip this section unless you must know what every line in your shell
@@ -659,7 +673,6 @@ for environment variables that can be used to customize the build.
----
## Development
The pyenv source code is [hosted on

View File

@@ -12,7 +12,7 @@
set -e
[ -n "$PYENV_DEBUG" ] && set -x
version="2.3.17"
version="2.3.19"
git_revision=""
if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q pyenv; then

View File

@@ -109,7 +109,12 @@ function detect_profile() {
profile='~/.zprofile'
rc='~/.zshrc'
;;
ksh )
ksh | ksh93 | mksh )
# There are two implementations of Korn shell: AT&T (ksh93) and Mir (mksh).
# Systems may have them installed under those names, or as ksh, so those
# are recognized here. The obsolete ksh88 (subsumed by ksh93) and pdksh
# (subsumed by mksh) are not included, since they are unlikely to still
# be in use as interactive shells anywhere.
profile='~/.profile'
rc='~/.profile'
;;
@@ -269,7 +274,7 @@ function pyenv
end
EOS
;;
ksh )
ksh | ksh93 | mksh )
cat <<EOS
function pyenv {
typeset command

View File

@@ -121,7 +121,7 @@ print_version() {
elif (( ${BASH_VERSINFO[0]} <= 3 )) && exists "$1" "${current_versions[@]}"; then
echo "${hit_prefix}${version_repr} (set by $(pyenv-version-origin))"
else
echo "${miss_prefix}$1"
echo "${miss_prefix}${version_repr}"
fi
num_versions=$((num_versions + 1))
}

View File

@@ -1,4 +1,4 @@
.TH PYENV 1 "12 Dec 2020" "PYENV"
.TH PYENV 1 "24 Apr 2023" "PYENV"
.SH NAME
pyenv \- Simple Python version management
.SH SYNOPSIS
@@ -12,10 +12,12 @@ pyenv lets you easily switch between multiple versions of Python\. It's simple,
\fBAppend\fR the following to \fB$HOME/.bashrc\fR
.P
.RS 15
source /usr/share/pyenv/pyenv_user_setup.bash
.nf
if command -v pyenv 1>/dev/null 2>&1; then\n
eval "$(pyenv init -)" \n
fi
.fi
.RE
.\"OR
.\"\fBsh echo \-e \if command \-v pyenv 1>/dev/null 2>&1; then\en eval "$(pyenv init \-)"\enfi' >> ~/\.bashrc\fR
.RS 3
.P
.nh

View File

@@ -1958,6 +1958,11 @@ build_package_verify_py312() {
build_package_verify_py311 "$1" "${2:-3.12}"
}
# Post-install check for Python 3.13.x
build_package_verify_py313() {
build_package_verify_py312 "$1" "${2:-3.13}"
}
# Post-install check for Python 3.x rolling release scripts
# XXX: Will need splitting into project-specific ones if there emerge
# multiple rolling-release scripts with different checks needed

View File

@@ -5,5 +5,5 @@ install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.
if has_tar_xz_support; then
install_package "Python-3.10.11" "https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz#3c3bc3048303721c904a03eb8326b631e921f11cc3be2988456a42f115daf04c" standard verify_py310 copy_python_gdb ensurepip
else
install_package "Python-3.10.11" "https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz#3c3bc3048303721c904a03eb8326b631e921f11cc3be2988456a42f115daf04c" standard verify_py310 copy_python_gdb ensurepip
install_package "Python-3.10.11" "https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz#f3db31b668efa983508bd67b5712898aa4247899a346f2eb745734699ccd3859" standard verify_py310 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,9 @@
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.10.12" "https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz#afb74bf19130e7a47d10312c8f5e784f24e0527981eab68e20546cfb865830b8" standard verify_py310 copy_python_gdb ensurepip
else
install_package "Python-3.10.12" "https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz#a43cd383f3999a6f4a7db2062b2fc9594fefa73e175b3aedafa295a51a7bb65c" standard verify_py310 copy_python_gdb ensurepip
fi

View File

@@ -6,5 +6,5 @@ install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.
if has_tar_xz_support; then
install_package "Python-3.11.3" "https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tar.xz#8a5db99c961a7ecf27c75956189c9602c968751f11dbeae2b900dbff1c085b5e" standard verify_py311 copy_python_gdb ensurepip
else
install_package "Python-3.11.3" "https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tar.xz#8a5db99c961a7ecf27c75956189c9602c968751f11dbeae2b900dbff1c085b5e" standard verify_py311 copy_python_gdb ensurepip
install_package "Python-3.11.3" "https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz#1a79f3df32265d9e6625f1a0b31c28eb1594df911403d11f3320ee1da1b3e048" standard verify_py311 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,10 @@
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.11.4" "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz#2f0e409df2ab57aa9fc4cbddfb976af44e4e55bf6f619eee6bc5c2297264a7f6" standard verify_py311 copy_python_gdb ensurepip
else
install_package "Python-3.11.4" "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz#85c37a265e5c9dd9f75b35f954e31fbfc10383162417285e30ad25cc073a0d63" standard verify_py311 copy_python_gdb ensurepip
fi

View File

@@ -4,4 +4,4 @@ export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
export PYTHON_BUILD_CONFIGURE_WITH_DSYMUTIL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_git "Python-3.12-dev" "https://github.com/python/cpython" main standard verify_py312 copy_python_gdb ensurepip
install_git "Python-3.12-dev" "https://github.com/python/cpython" 3.12 standard verify_py312 copy_python_gdb ensurepip

View File

@@ -3,7 +3,7 @@ export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.12.0a7" "https://www.python.org/ftp/python/3.12.0/Python-3.12.0a7.tar.xz#a19ae4dc5afebdff5e1312346f160062a11e0dbd5f9e68a6a981ea37b21608e1" standard verify_py312 copy_python_gdb ensurepip
install_package "Python-3.12.0b2" "https://www.python.org/ftp/python/3.12.0/Python-3.12.0b2.tar.xz#8dfc42dda6e4d0647cf8a6f7cd900704dea9fd866402a282829bd2e6e271b818" standard verify_py312 copy_python_gdb ensurepip
else
install_package "Python-3.12.0a7" "https://www.python.org/ftp/python/3.12.0/Python-3.12.0a7.tgz#86d288766153193706e545cc98f73ea8ef1a9cb057608cfdecbd89190b796cf6" standard verify_py312 copy_python_gdb ensurepip
install_package "Python-3.12.0b2" "https://www.python.org/ftp/python/3.12.0/Python-3.12.0b2.tgz#ad5f0d88824de3240928433efe427ce8aeb0f88928eb3f44e43647000cce599b" standard verify_py312 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,7 @@
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
export PYTHON_BUILD_CONFIGURE_WITH_DSYMUTIL=1
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
install_git "Python-3.13-dev" "https://github.com/python/cpython" main standard verify_py313 copy_python_gdb ensurepip

View File

@@ -0,0 +1,9 @@
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.7.17" "https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tar.xz#7911051ed0422fd54b8f59ffc030f7cf2ae30e0f61bda191800bb040dce4f9d2" standard verify_py37 copy_python_gdb ensurepip
else
install_package "Python-3.7.17" "https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tgz#fd50161bc2a04f4c22a0971ff0f3856d98b4bf294f89740a9f06b520aae63b49" standard verify_py37 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,12 @@
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
# Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181)
export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}"
install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.8.17" "https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tar.xz#2e54b0c68191f16552f6de2e97a2396540572a219f6bbb28591a137cecc490a9" standard verify_py38 copy_python_gdb ensurepip
else
install_package "Python-3.8.17" "https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tgz#def428fa6cf61b66bcde72e3d9f7d07d33b2e4226f04f9d6fce8384c055113ae" standard verify_py38 copy_python_gdb ensurepip
fi

View File

@@ -0,0 +1,12 @@
prefer_openssl11
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
# Avoid a compilation error when linking against OpenSSL built with SSLv3 support (fixed in 3.10.0) (#2181)
export PYTHON_CFLAGS="-DOPENSSL_NO_SSL3${PYTHON_CFLAGS:+ $PYTHON_CFLAGS}"
install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" mac_openssl --if has_broken_mac_openssl
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
if has_tar_xz_support; then
install_package "Python-3.9.17" "https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tar.xz#30ce057c44f283f8ed93606ccbdb8d51dd526bdc4c62cce5e0dc217bfa3e8cee" standard verify_py39 copy_python_gdb ensurepip
else
install_package "Python-3.9.17" "https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tgz#8ead58f669f7e19d777c3556b62fae29a81d7f06a7122ff9bc57f7dd82d7e014" standard verify_py39 copy_python_gdb ensurepip
fi

View File

@@ -238,11 +238,13 @@ OUT
@test "non-bare output shows symlink contents" {
create_version "1.9.0"
create_alias "link" "foo/bar"
create_alias "link" "1.9.0"
run pyenv-versions
assert_success <<OUT
assert_success
assert_output <<OUT
* system (set by ${PYENV_ROOT}/version)
1.9.0
link --> foo/bar
link --> 1.9.0
OUT
}