Browse Source

Merge remote-tracking branch 'rbenv/master' into rbenv-1.0

pull/549/head
Yamashita, Yuu 8 years ago
parent
commit
41ce3aade2
26 changed files with 240 additions and 217 deletions
  1. +2
    -0
      .agignore
  2. +1
    -0
      .vimrc
  3. +80
    -0
      CONDUCT.md
  4. +0
    -23
      bin/python-local-exec
  5. +1
    -0
      libexec/pyenv
  6. +4
    -7
      libexec/pyenv---version
  7. +2
    -0
      libexec/pyenv-hooks
  8. +2
    -2
      libexec/pyenv-init
  9. +0
    -4
      libexec/pyenv-local
  10. +11
    -18
      libexec/pyenv-version-file
  11. +7
    -0
      libexec/pyenv-version-name
  12. +12
    -1
      libexec/pyenv-version-origin
  13. +1
    -1
      libexec/pyenv-versions
  14. +8
    -27
      test/--version.bats
  15. +2
    -15
      test/exec.bats
  16. +2
    -2
      test/global.bats
  17. +13
    -14
      test/hooks.bats
  18. +13
    -1
      test/init.bats
  19. +3
    -47
      test/local.bats
  20. +2
    -1
      test/pyenv.bats
  21. +2
    -4
      test/rehash.bats
  22. +9
    -0
      test/test_helper.bash
  23. +16
    -40
      test/version-file.bats
  24. +23
    -2
      test/version-name.bats
  25. +22
    -4
      test/version-origin.bats
  26. +2
    -4
      test/which.bats

+ 2
- 0
.agignore View File

@ -0,0 +1,2 @@
./versions
./cache

+ 1
- 0
.vimrc View File

@ -0,0 +1 @@
set wildignore+=versions/*,cache/*

+ 80
- 0
CONDUCT.md View File

@ -0,0 +1,80 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting one of the project maintainers listed below. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Project Maintainers
* Sam Stephenson <<sstephenson@gmail.com>>
* Mislav Marohnić <<mislav.marohnic@gmail.com>>
* Erik Michaels-Ober <<sferik@gmail.com>>
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

+ 0
- 23
bin/python-local-exec View File

@ -1,23 +0,0 @@
#!/usr/bin/env bash
#
# `python-local-exec` is a drop-in replacement for the standard Python
# shebang line:
#
# #!/usr/bin/env python-local-exec
#
# Use it for scripts inside a project with an `.pyenv-version`
# file. When you run the scripts, they'll use the project-specified
# Python version, regardless of what directory they're run from. Useful
# for e.g. running project tasks in cron scripts without needing to
# `cd` into the project first.
set -e
export PYENV_DIR="${1%/*}"
[ -n "$PYENV_SILENCE_WARNINGS" ] || {
echo "pyenv: \`python-local-exec' is deprecated and will be removed in the next release."
echo " To upgrade: https://github.com/yyuu/pyenv/wiki/python-local-exec"
echo
} >&2
exec python "$@"

+ 1
- 0
libexec/pyenv View File

@ -97,6 +97,7 @@ PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:/usr/local/etc/pyenv.d:/etc/pyenv.d:/usr/lib
for plugin_hook in "${PYENV_ROOT}/plugins/"*/etc/pyenv.d; do for plugin_hook in "${PYENV_ROOT}/plugins/"*/etc/pyenv.d; do
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${plugin_hook}" PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${plugin_hook}"
done done
PYENV_HOOK_PATH="${PYENV_HOOK_PATH#:}"
export PYENV_HOOK_PATH export PYENV_HOOK_PATH
shopt -u nullglob shopt -u nullglob

+ 4
- 7
libexec/pyenv---version View File

@ -15,12 +15,9 @@ set -e
version="20160202" version="20160202"
git_revision="" git_revision=""
for source_dir in "${BASH_SOURCE%/*}" "$PYENV_ROOT"; do
if cd "$source_dir" 2>/dev/null && git remote -v 2>/dev/null | grep -q pyenv; then
git_revision="$(git describe --tags HEAD 2>/dev/null || true)"
git_revision="${git_revision#v}"
[ -z "$git_revision" ] || break
fi
done
if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q pyenv; then
git_revision="$(git describe --tags HEAD 2>/dev/null || true)"
git_revision="${git_revision#v}"
fi
echo "pyenv ${git_revision:-$version}" echo "pyenv ${git_revision:-$version}"

+ 2
- 0
libexec/pyenv-hooks View File

@ -9,6 +9,8 @@ set -e
if [ "$1" = "--complete" ]; then if [ "$1" = "--complete" ]; then
echo exec echo exec
echo rehash echo rehash
echo version-name
echo version-origin
echo which echo which
exit exit
fi fi

+ 2
- 2
libexec/pyenv-init View File

@ -33,9 +33,9 @@ done
shell="$1" shell="$1"
if [ -z "$shell" ]; then if [ -z "$shell" ]; then
shell="$(ps c -p "$PPID" -o 'ucomm=' 2>/dev/null || true)"
shell="${shell##-}"
shell="$(ps -p "$PPID" -o 'args=' 2>/dev/null || true)"
shell="${shell%% *}" shell="${shell%% *}"
shell="${shell##-}"
shell="${shell:-$SHELL}" shell="${shell:-$SHELL}"
shell="${shell##*/}" shell="${shell##*/}"
fi fi

+ 0
- 4
libexec/pyenv-local View File

@ -15,10 +15,6 @@
# `PYENV_VERSION' environment variable takes precedence over local # `PYENV_VERSION' environment variable takes precedence over local
# and global versions. # and global versions.
# #
# For backwards compatibility, pyenv will also read version
# specifications from `.pyenv-version' files, but a `.python-version'
# file in the same directory takes precedence.
#
# <version> should be a string matching a Python version known to pyenv. # <version> should be a string matching a Python version known to pyenv.
# The special version string `system' will use your default system Python. # The special version string `system' will use your default system Python.
# Run `pyenv versions' for a list of available Python versions. # Run `pyenv versions' for a list of available Python versions.

+ 11
- 18
libexec/pyenv-version-file View File

@ -1,35 +1,28 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Usage: pyenv version-file [<dir>]
# Summary: Detect the file that sets the current pyenv version # Summary: Detect the file that sets the current pyenv version
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
target_dir="$1"
find_local_version_file() { find_local_version_file() {
local root="$1" local root="$1"
while true; do
[[ "$root" =~ ^//[^/]*$ ]] && break
while ! [[ "$root" =~ ^//[^/]*$ ]]; do
if [ -e "${root}/.python-version" ]; then if [ -e "${root}/.python-version" ]; then
echo "${root}/.python-version" echo "${root}/.python-version"
exit
elif [ -e "${root}/.pyenv-version" ]; then
echo "${root}/.pyenv-version"
exit
return 0
fi fi
[ -n "$root" ] || break [ -n "$root" ] || break
root="${root%/*}" root="${root%/*}"
done done
return 1
} }
find_local_version_file "$PYENV_DIR"
[ "$PYENV_DIR" = "$PWD" ] || find_local_version_file "$PWD"
global_version_file="${PYENV_ROOT}/version"
if [ -e "$global_version_file" ]; then
echo "$global_version_file"
elif [ -e "${PYENV_ROOT}/global" ]; then
echo "${PYENV_ROOT}/global"
elif [ -e "${PYENV_ROOT}/default" ]; then
echo "${PYENV_ROOT}/default"
if [ -n "$target_dir" ]; then
find_local_version_file "$target_dir"
else else
echo "$global_version_file"
find_local_version_file "$PYENV_DIR" || {
[ "$PYENV_DIR" != "$PWD" ] && find_local_version_file "$PWD"
} || echo "${PYENV_ROOT}/version"
fi fi

+ 7
- 0
libexec/pyenv-version-name View File

@ -8,6 +8,13 @@ if [ -z "$PYENV_VERSION" ]; then
PYENV_VERSION="$(pyenv-version-file-read "$PYENV_VERSION_FILE" || true)" PYENV_VERSION="$(pyenv-version-file-read "$PYENV_VERSION_FILE" || true)"
fi fi
OLDIFS="$IFS"
IFS=$'\n' scripts=(`pyenv-hooks version-name`)
IFS="$OLDIFS"
for script in "${scripts[@]}"; do
source "$script"
done
if [ -z "$PYENV_VERSION" ] || [ "$PYENV_VERSION" = "system" ]; then if [ -z "$PYENV_VERSION" ] || [ "$PYENV_VERSION" = "system" ]; then
echo "system" echo "system"
exit exit

+ 12
- 1
libexec/pyenv-version-origin View File

@ -3,7 +3,18 @@
set -e set -e
[ -n "$PYENV_DEBUG" ] && set -x [ -n "$PYENV_DEBUG" ] && set -x
if [ -n "$PYENV_VERSION" ]; then
unset PYENV_VERSION_ORIGIN
OLDIFS="$IFS"
IFS=$'\n' scripts=(`pyenv-hooks version-origin`)
IFS="$OLDIFS"
for script in "${scripts[@]}"; do
source "$script"
done
if [ -n "$PYENV_VERSION_ORIGIN" ]; then
echo "$PYENV_VERSION_ORIGIN"
elif [ -n "$PYENV_VERSION" ]; then
echo "PYENV_VERSION environment variable" echo "PYENV_VERSION environment variable"
else else
pyenv-version-file pyenv-version-file

+ 1
- 1
libexec/pyenv-versions View File

@ -27,7 +27,7 @@ done
versions_dir="${PYENV_ROOT}/versions" versions_dir="${PYENV_ROOT}/versions"
if ! enable -f "${BASH_SOURCE%/*}"/../libexec/pyenv-realpath.dylib realpath 2>/dev/null; then
if ! enable -f "${BASH_SOURCE%/*}"/pyenv-realpath.dylib realpath 2>/dev/null; then
if [ -n "$PYENV_NATIVE_EXT" ]; then if [ -n "$PYENV_NATIVE_EXT" ]; then
echo "pyenv: failed to load \`realpath' builtin" >&2 echo "pyenv: failed to load \`realpath' builtin" >&2
exit 1 exit 1

+ 8
- 27
test/--version.bats View File

@ -2,22 +2,13 @@
load test_helper load test_helper
export GIT_DIR="${PYENV_TEST_DIR}/.git"
setup() { setup() {
mkdir -p "$HOME" mkdir -p "$HOME"
git config --global user.name "Tester" git config --global user.name "Tester"
git config --global user.email "tester@test.local" git config --global user.email "tester@test.local"
mkdir -p "${PYENV_TEST_DIR}/bin"
cat > "${PYENV_TEST_DIR}/bin/git" <<CMD
#!$BASH
if [[ \$1 == remote && \$PWD != "\$PYENV_TEST_DIR"/* ]]; then
echo "not allowed" >&2
exit 1
else
exec $(which git) "\$@"
fi
CMD
chmod +x "${PYENV_TEST_DIR}/bin/git"
cd "$PYENV_TEST_DIR"
} }
git_commit() { git_commit() {
@ -28,47 +19,37 @@ git_commit() {
assert [ ! -e "$PYENV_ROOT" ] assert [ ! -e "$PYENV_ROOT" ]
run pyenv---version run pyenv---version
assert_success assert_success
[[ $output == "pyenv 20"* ]]
[[ $output == "ybenv "?.?.? ]]
} }
@test "doesn't read version from non-pyenv repo" { @test "doesn't read version from non-pyenv repo" {
mkdir -p "$PYENV_ROOT"
cd "$PYENV_ROOT"
git init git init
git remote add origin https://github.com/homebrew/homebrew.git git remote add origin https://github.com/homebrew/homebrew.git
git_commit git_commit
git tag v1.0 git tag v1.0
cd "$PYENV_TEST_DIR"
run pyenv---version run pyenv---version
assert_success assert_success
[[ $output == "pyenv 20"* ]]
[[ $output == "pyenv "?.?.? ]]
} }
@test "reads version from git repo" { @test "reads version from git repo" {
mkdir -p "$PYENV_ROOT"
cd "$PYENV_ROOT"
git init git init
git remote add origin https://github.com/yyuu/pyenv.git git remote add origin https://github.com/yyuu/pyenv.git
git_commit git_commit
git tag v20380119
git tag v0.4.1
git_commit git_commit
git_commit git_commit
cd "$PYENV_TEST_DIR"
run pyenv---version run pyenv---version
assert_success
[[ $output == "pyenv 20380119-2-g"* ]]
assert_success "pyenv 0.4.1-2-g$(git rev-parse --short HEAD)"
} }
@test "prints default version if no tags in git repo" { @test "prints default version if no tags in git repo" {
mkdir -p "$PYENV_ROOT"
cd "$PYENV_ROOT"
git init git init
git remote add origin https://github.com/yyuu/pyenv.git git remote add origin https://github.com/yyuu/pyenv.git
git_commit git_commit
cd "$PYENV_TEST_DIR"
run pyenv---version run pyenv---version
[[ $output == "pyenv 20"* ]]
[[ $output == "pyenv "?.?.? ]]
} }

+ 2
- 15
test/exec.bats View File

@ -43,27 +43,14 @@ python
OUT OUT
} }
@test "supports hook path with spaces" {
hook_path="${PYENV_TEST_DIR}/custom stuff/pyenv hooks"
mkdir -p "${hook_path}/exec"
echo "export HELLO='from hook'" > "${hook_path}/exec/hello.bash"
export PYENV_VERSION=system
PYENV_HOOK_PATH="$hook_path" run pyenv-exec env
assert_success
assert_line "HELLO=from hook"
}
@test "carries original IFS within hooks" { @test "carries original IFS within hooks" {
hook_path="${PYENV_TEST_DIR}/pyenv.d"
mkdir -p "${hook_path}/exec"
cat > "${hook_path}/exec/hello.bash" <<SH
create_hook exec hello.bash <<SH
hellos=(\$(printf "hello\\tugly world\\nagain")) hellos=(\$(printf "hello\\tugly world\\nagain"))
echo HELLO="\$(printf ":%s" "\${hellos[@]}")" echo HELLO="\$(printf ":%s" "\${hellos[@]}")"
SH SH
export PYENV_VERSION=system export PYENV_VERSION=system
PYENV_HOOK_PATH="$hook_path" IFS=$' \t\n' run pyenv-exec env
IFS=$' \t\n' run pyenv-exec env
assert_success assert_success
assert_line "HELLO=:hello:ugly:world:again" assert_line "HELLO=:hello:ugly:world:again"
} }

+ 2
- 2
test/global.bats View File

@ -3,7 +3,7 @@
load test_helper load test_helper
@test "default" { @test "default" {
run pyenv global
run pyenv-global
assert_success assert_success
assert_output "system" assert_output "system"
} }
@ -20,7 +20,7 @@ load test_helper
mkdir -p "$PYENV_ROOT/versions/1.2.3" mkdir -p "$PYENV_ROOT/versions/1.2.3"
run pyenv-global "1.2.3" run pyenv-global "1.2.3"
assert_success assert_success
run pyenv global
run pyenv-global
assert_success "1.2.3" assert_success "1.2.3"
} }

+ 13
- 14
test/hooks.bats View File

@ -2,11 +2,6 @@
load test_helper load test_helper
create_hook() {
mkdir -p "$1/$2"
touch "$1/$2/$3"
}
@test "prints usage help given no argument" { @test "prints usage help given no argument" {
run pyenv-hooks run pyenv-hooks
assert_failure "Usage: pyenv hooks <command>" assert_failure "Usage: pyenv hooks <command>"
@ -15,11 +10,13 @@ create_hook() {
@test "prints list of hooks" { @test "prints list of hooks" {
path1="${PYENV_TEST_DIR}/pyenv.d" path1="${PYENV_TEST_DIR}/pyenv.d"
path2="${PYENV_TEST_DIR}/etc/pyenv_hooks" path2="${PYENV_TEST_DIR}/etc/pyenv_hooks"
create_hook "$path1" exec "hello.bash"
create_hook "$path1" exec "ahoy.bash"
create_hook "$path1" exec "invalid.sh"
create_hook "$path1" which "boom.bash"
create_hook "$path2" exec "bueno.bash"
PYENV_HOOK_PATH="$path1"
create_hook exec "hello.bash"
create_hook exec "ahoy.bash"
create_hook exec "invalid.sh"
create_hook which "boom.bash"
PYENV_HOOK_PATH="$path2"
create_hook exec "bueno.bash"
PYENV_HOOK_PATH="$path1:$path2" run pyenv-hooks exec PYENV_HOOK_PATH="$path1:$path2" run pyenv-hooks exec
assert_success assert_success
@ -33,8 +30,10 @@ OUT
@test "supports hook paths with spaces" { @test "supports hook paths with spaces" {
path1="${PYENV_TEST_DIR}/my hooks/pyenv.d" path1="${PYENV_TEST_DIR}/my hooks/pyenv.d"
path2="${PYENV_TEST_DIR}/etc/pyenv hooks" path2="${PYENV_TEST_DIR}/etc/pyenv hooks"
create_hook "$path1" exec "hello.bash"
create_hook "$path2" exec "ahoy.bash"
PYENV_HOOK_PATH="$path1"
create_hook exec "hello.bash"
PYENV_HOOK_PATH="$path2"
create_hook exec "ahoy.bash"
PYENV_HOOK_PATH="$path1:$path2" run pyenv-hooks exec PYENV_HOOK_PATH="$path1:$path2" run pyenv-hooks exec
assert_success assert_success
@ -45,8 +44,8 @@ OUT
} }
@test "resolves relative paths" { @test "resolves relative paths" {
path="${PYENV_TEST_DIR}/pyenv.d"
create_hook "$path" exec "hello.bash"
PYENV_HOOK_PATH="${PYENV_TEST_DIR}/pyenv.d"
create_hook exec "hello.bash"
mkdir -p "$HOME" mkdir -p "$HOME"
PYENV_HOOK_PATH="${HOME}/../pyenv.d" run pyenv-hooks exec PYENV_HOOK_PATH="${HOME}/../pyenv.d" run pyenv-hooks exec

+ 13
- 1
test/init.bats View File

@ -25,12 +25,24 @@ load test_helper
} }
@test "detect parent shell" { @test "detect parent shell" {
root="$(cd $BATS_TEST_DIRNAME/.. && pwd)"
SHELL=/bin/false run pyenv-init - SHELL=/bin/false run pyenv-init -
assert_success assert_success
assert_line "export PYENV_SHELL=bash" assert_line "export PYENV_SHELL=bash"
} }
@test "detect parent shell from script" {
mkdir -p "$PYENV_TEST_DIR"
cd "$PYENV_TEST_DIR"
cat > myscript.sh <<OUT
#!/bin/sh
eval "\$(pyenv-init -)"
echo \$PYENV_SHELL
OUT
chmod +x myscript.sh
run ./myscript.sh /bin/zsh
assert_success "sh"
}
@test "setup shell completions (fish)" { @test "setup shell completions (fish)" {
root="$(cd $BATS_TEST_DIRNAME/.. && pwd)" root="$(cd $BATS_TEST_DIRNAME/.. && pwd)"
run pyenv-init - fish run pyenv-init - fish

+ 3
- 47
test/local.bats View File

@ -19,24 +19,11 @@ setup() {
assert_success "1.2.3" assert_success "1.2.3"
} }
@test "supports legacy .pyenv-version file" {
echo "1.2.3" > .pyenv-version
run pyenv-local
assert_success "1.2.3"
}
@test "local .python-version has precedence over .pyenv-version" {
echo "2.7" > .pyenv-version
echo "3.4" > .python-version
run pyenv-local
assert_success "3.4"
}
@test "ignores version in parent directory" {
@test "discovers version file in parent directory" {
echo "1.2.3" > .python-version echo "1.2.3" > .python-version
mkdir -p "subdir" && cd "subdir" mkdir -p "subdir" && cd "subdir"
run pyenv-local run pyenv-local
assert_failure
assert_success "1.2.3"
} }
@test "ignores PYENV_DIR" { @test "ignores PYENV_DIR" {
@ -64,40 +51,9 @@ setup() {
assert [ "$(cat .python-version)" = "1.2.3" ] assert [ "$(cat .python-version)" = "1.2.3" ]
} }
@test "renames .pyenv-version to .python-version" {
echo "2.7.6" > .pyenv-version
mkdir -p "${PYENV_ROOT}/versions/3.3.3"
run pyenv-local
assert_success "2.7.6"
run pyenv-local "3.3.3"
assert_success
assert_output <<OUT
pyenv: removed existing \`.pyenv-version' file and migrated
local version specification to \`.python-version' file
OUT
assert [ ! -e .pyenv-version ]
assert [ "$(cat .python-version)" = "3.3.3" ]
}
@test "doesn't rename .pyenv-version if changing the version failed" {
echo "2.7.6" > .pyenv-version
assert [ ! -e "${PYENV_ROOT}/versions/3.3.3" ]
run pyenv-local "3.3.3"
assert_failure "pyenv: version \`3.3.3' not installed"
assert [ ! -e .python-version ]
assert [ "$(cat .pyenv-version)" = "2.7.6" ]
}
@test "unsets local version" { @test "unsets local version" {
touch .python-version touch .python-version
run pyenv-local --unset run pyenv-local --unset
assert_success "" assert_success ""
assert [ ! -e .pyenv-version ]
}
@test "unsets alternate version file" {
touch .pyenv-version
run pyenv-local --unset
assert_success ""
assert [ ! -e .pyenv-version ]
assert [ ! -e .python-version ]
} }

+ 2
- 1
test/pyenv.bats View File

@ -70,6 +70,7 @@ load test_helper
} }
@test "PYENV_HOOK_PATH includes pyenv built-in plugins" { @test "PYENV_HOOK_PATH includes pyenv built-in plugins" {
unset PYENV_HOOK_PATH
run pyenv echo "PYENV_HOOK_PATH" run pyenv echo "PYENV_HOOK_PATH"
assert_success ":${PYENV_ROOT}/pyenv.d:${BATS_TEST_DIRNAME%/*}/pyenv.d:/usr/local/etc/pyenv.d:/etc/pyenv.d:/usr/lib/pyenv/hooks"
assert_success "${PYENV_ROOT}/pyenv.d:${BATS_TEST_DIRNAME%/*}/pyenv.d:/usr/local/etc/pyenv.d:/etc/pyenv.d:/usr/lib/pyenv/hooks"
} }

+ 2
- 4
test/rehash.bats View File

@ -86,15 +86,13 @@ OUT
} }
@test "carries original IFS within hooks" { @test "carries original IFS within hooks" {
hook_path="${PYENV_TEST_DIR}/pyenv.d"
mkdir -p "${hook_path}/rehash"
cat > "${hook_path}/rehash/hello.bash" <<SH
create_hook rehash hello.bash <<SH
hellos=(\$(printf "hello\\tugly world\\nagain")) hellos=(\$(printf "hello\\tugly world\\nagain"))
echo HELLO="\$(printf ":%s" "\${hellos[@]}")" echo HELLO="\$(printf ":%s" "\${hellos[@]}")"
exit exit
SH SH
PYENV_HOOK_PATH="$hook_path" IFS=$' \t\n' run pyenv-rehash
IFS=$' \t\n' run pyenv-rehash
assert_success assert_success
assert_output "HELLO=:hello:ugly:world:again" assert_output "HELLO=:hello:ugly:world:again"
} }

+ 9
- 0
test/test_helper.bash View File

@ -17,6 +17,7 @@ if [ -z "$PYENV_TEST_DIR" ]; then
export PYENV_ROOT="${PYENV_TEST_DIR}/root" export PYENV_ROOT="${PYENV_TEST_DIR}/root"
export HOME="${PYENV_TEST_DIR}/home" export HOME="${PYENV_TEST_DIR}/home"
export PYENV_HOOK_PATH="${PYENV_ROOT}/pyenv.d"
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
PATH="${PYENV_TEST_DIR}/bin:$PATH" PATH="${PYENV_TEST_DIR}/bin:$PATH"
@ -129,3 +130,11 @@ path_without() {
path="${path#:}" path="${path#:}"
echo "${path%:}" echo "${path%:}"
} }
create_hook() {
mkdir -p "${PYENV_HOOK_PATH}/$1"
touch "${PYENV_HOOK_PATH}/$1/$2"
if [ ! -t 0 ]; then
cat > "${PYENV_HOOK_PATH}/$1/$2"
fi
}

+ 16
- 40
test/version-file.bats View File

@ -12,29 +12,15 @@ create_file() {
touch "$1" touch "$1"
} }
@test "prints global file if no version files exist" {
assert [ ! -e "${PYENV_ROOT}/version" ]
assert [ ! -e ".python-version" ]
@test "detects global 'version' file" {
create_file "${PYENV_ROOT}/version"
run pyenv-version-file run pyenv-version-file
assert_success "${PYENV_ROOT}/version" assert_success "${PYENV_ROOT}/version"
} }
@test "detects 'global' file" {
create_file "${PYENV_ROOT}/global"
run pyenv-version-file
assert_success "${PYENV_ROOT}/global"
}
@test "detects 'default' file" {
create_file "${PYENV_ROOT}/default"
run pyenv-version-file
assert_success "${PYENV_ROOT}/default"
}
@test "'version' has precedence over 'global' and 'default'" {
create_file "${PYENV_ROOT}/version"
create_file "${PYENV_ROOT}/global"
create_file "${PYENV_ROOT}/default"
@test "prints global file if no version files exist" {
assert [ ! -e "${PYENV_ROOT}/version" ]
assert [ ! -e ".python-version" ]
run pyenv-version-file run pyenv-version-file
assert_success "${PYENV_ROOT}/version" assert_success "${PYENV_ROOT}/version"
} }
@ -45,19 +31,6 @@ create_file() {
assert_success "${PYENV_TEST_DIR}/.python-version" assert_success "${PYENV_TEST_DIR}/.python-version"
} }
@test "legacy file in current directory" {
create_file ".pyenv-version"
run pyenv-version-file
assert_success "${PYENV_TEST_DIR}/.pyenv-version"
}
@test ".python-version has precedence over legacy file" {
create_file ".python-version"
create_file ".pyenv-version"
run pyenv-version-file
assert_success "${PYENV_TEST_DIR}/.python-version"
}
@test "in parent directory" { @test "in parent directory" {
create_file ".python-version" create_file ".python-version"
mkdir -p project mkdir -p project
@ -74,14 +47,6 @@ create_file() {
assert_success "${PYENV_TEST_DIR}/project/.python-version" assert_success "${PYENV_TEST_DIR}/project/.python-version"
} }
@test "legacy file has precedence if higher" {
create_file ".python-version"
create_file "project/.pyenv-version"
cd project
run pyenv-version-file
assert_success "${PYENV_TEST_DIR}/project/.pyenv-version"
}
@test "PYENV_DIR has precedence over PWD" { @test "PYENV_DIR has precedence over PWD" {
create_file "widget/.python-version" create_file "widget/.python-version"
create_file "project/.python-version" create_file "project/.python-version"
@ -97,3 +62,14 @@ create_file() {
PYENV_DIR="${PYENV_TEST_DIR}/widget/blank" run pyenv-version-file PYENV_DIR="${PYENV_TEST_DIR}/widget/blank" run pyenv-version-file
assert_success "${PYENV_TEST_DIR}/project/.python-version" assert_success "${PYENV_TEST_DIR}/project/.python-version"
} }
@test "finds version file in target directory" {
create_file "project/.python-version"
run pyenv-version-file "${PWD}/project"
assert_success "${PYENV_TEST_DIR}/project/.python-version"
}
@test "fails when no version file in target directory" {
run pyenv-version-file "$PWD"
assert_failure ""
}

+ 23
- 2
test/version-name.bats View File

@ -22,9 +22,30 @@ setup() {
assert_success "system" assert_success "system"
} }
@test "PYENV_VERSION can be overridden by hook" {
create_version "2.7.11"
create_version "3.5.1"
create_hook version-name test.bash <<<"PYENV_VERSION=3.5.1"
PYENV_VERSION=2.7.11 run pyenv-version-name
assert_success "3.5.1"
}
@test "carries original IFS within hooks" {
create_hook version-name hello.bash <<SH
hellos=(\$(printf "hello\\tugly world\\nagain"))
echo HELLO="\$(printf ":%s" "\${hellos[@]}")"
SH
export PYENV_VERSION=system
IFS=$' \t\n' run pyenv-version-name env
assert_success
assert_line "HELLO=:hello:ugly:world:again"
}
@test "PYENV_VERSION has precedence over local" { @test "PYENV_VERSION has precedence over local" {
create_version "2.7.6"
create_version "3.3.3"
create_version "2.7.11"
create_version "3.5.1"
cat > ".python-version" <<<"2.7.6" cat > ".python-version" <<<"2.7.6"
run pyenv-version-name run pyenv-version-name

+ 22
- 4
test/version-origin.bats View File

@ -31,8 +31,26 @@ setup() {
assert_success "${PWD}/.python-version" assert_success "${PWD}/.python-version"
} }
@test "detects alternate version file" {
touch .pyenv-version
run pyenv-version-origin
assert_success "${PWD}/.pyenv-version"
@test "reports from hook" {
create_hook version-origin test.bash <<<"PYENV_VERSION_ORIGIN=plugin"
PYENV_VERSION=1 run pyenv-version-origin
assert_success "plugin"
}
@test "carries original IFS within hooks" {
create_hook version-origin hello.bash <<SH
hellos=(\$(printf "hello\\tugly world\\nagain"))
echo HELLO="\$(printf ":%s" "\${hellos[@]}")"
SH
export PYENV_VERSION=system
IFS=$' \t\n' run pyenv-version-origin env
assert_success
assert_line "HELLO=:hello:ugly:world:again"
}
@test "doesn't inherit PYENV_VERSION_ORIGIN from environment" {
PYENV_VERSION_ORIGIN=ignored run pyenv-version-origin
assert_success "${PYENV_ROOT}/version"
} }

+ 2
- 4
test/which.bats View File

@ -113,15 +113,13 @@ OUT
} }
@test "carries original IFS within hooks" { @test "carries original IFS within hooks" {
hook_path="${PYENV_TEST_DIR}/pyenv.d"
mkdir -p "${hook_path}/which"
cat > "${hook_path}/which/hello.bash" <<SH
create_hook which hello.bash <<SH
hellos=(\$(printf "hello\\tugly world\\nagain")) hellos=(\$(printf "hello\\tugly world\\nagain"))
echo HELLO="\$(printf ":%s" "\${hellos[@]}")" echo HELLO="\$(printf ":%s" "\${hellos[@]}")"
exit exit
SH SH
PYENV_HOOK_PATH="$hook_path" IFS=$' \t\n' PYENV_VERSION=system run pyenv-which anything
IFS=$' \t\n' PYENV_VERSION=system run pyenv-which anything
assert_success assert_success
assert_output "HELLO=:hello:ugly:world:again" assert_output "HELLO=:hello:ugly:world:again"
} }

Loading…
Cancel
Save