Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commited1a3a5

Browse files
authored
Switch back to resolving symlinks forrbenv executable (#1439)
Considerations:- `./libexec/rbenv` executable is the entrypoint to the program;- BASH_SOURCE might be the path to a symlink that has activated `./libexec/rbenv`;- We must resolve the symlink to learn where rbenv's libexec directory is;- It's not guaranteed that rbenv commands will always remain directly under their own "libexec" directory, since a package maintainer can change that, e.g. rbenv commands are sometimes placed into `/usr/libexec/rbenv/*`;- Resolving symlinks might fail and in that case we just assume rbenv project layout.
1 parent22ee5d4 commited1a3a5

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

‎libexec/rbenv

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,38 @@ export RBENV_DIR
4242
shopt -s nullglob
4343

4444
rbenv_bin="${BASH_SOURCE:-$0}"
45-
bin_path="$(cd"${rbenv_bin%/*}"/../libexec&&pwd -P)"
45+
if [-L"$rbenv_bin" ];then
46+
# resolve rbenv symlink to find out where the actual libexec directory is
47+
if readlink="$(type -p greadlink)"|| readlink="$(type -p readlink)";then
48+
resolved="$("$readlink""$rbenv_bin"2>/dev/null)"
49+
if [[$resolved== /* ]];then
50+
libexec_dir="${resolved%/*}"
51+
else
52+
libexec_dir="$(cd"${rbenv_bin%/*}/${resolved%/*}"&& pwd)"
53+
fi
54+
else
55+
# no readlink available; assume rbenv project layout
56+
libexec_dir="${rbenv_bin%/*}"
57+
if [[$libexec_dir==*/* ]];then
58+
libexec_dir="${libexec_dir%/*}/libexec"
59+
else
60+
libexec_dir="${PWD}/libexec"
61+
fi
62+
fi
63+
else
64+
libexec_dir="${rbenv_bin%/*}"
65+
[[$libexec_dir!="." ]]|| libexec_dir="$PWD"
66+
fi
67+
4668
forplugin_binin"${RBENV_ROOT}/plugins/"*/bin;do
4769
PATH="${plugin_bin}:${PATH}"
4870
done
49-
export PATH="${bin_path}:${PATH}"
71+
export PATH="${libexec_dir}:${PATH}"
5072

5173
RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${RBENV_ROOT}/rbenv.d"
52-
if ["${bin_path%/*}"!="$RBENV_ROOT" ];then
74+
if [!"${libexec_dir%/*}"/rbenv.d-ef"$RBENV_ROOT"/rbenv.d ];then
5375
# Add rbenv's own `rbenv.d` unless rbenv was cloned to RBENV_ROOT
54-
RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${bin_path%/*}/rbenv.d"
76+
RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${libexec_dir%/*}/rbenv.d"
5577
fi
5678
RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:/usr/local/etc/rbenv.d:/etc/rbenv.d:/usr/lib/rbenv/hooks"
5779
forplugin_hookin"${RBENV_ROOT}/plugins/"*/etc/rbenv.d;do

‎test/rbenv.bats

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ load test_helper
4848

4949
@test"adds its own libexec to PATH" {
5050
run rbenvecho"PATH"
51-
assert_success"${BATS_TEST_DIRNAME%/*}/libexec:$PATH"
51+
assert_success"${BATS_TEST_DIRNAME}/../libexec:$PATH"
5252
}
5353

5454
@test"adds plugin bin dirs to PATH" {
5555
mkdir -p"$RBENV_ROOT"/plugins/ruby-build/bin
5656
mkdir -p"$RBENV_ROOT"/plugins/rbenv-each/bin
5757
run rbenvecho -F:"PATH"
5858
assert_success
59-
assert_line 0"${BATS_TEST_DIRNAME%/*}/libexec"
59+
assert_line 0"${BATS_TEST_DIRNAME}/../libexec"
6060
assert_line 1"${RBENV_ROOT}/plugins/ruby-build/bin"
6161
assert_line 2"${RBENV_ROOT}/plugins/rbenv-each/bin"
6262
}
@@ -72,5 +72,5 @@ load test_helper
7272
@test"RBENV_HOOK_PATH includes rbenv built-in plugins" {
7373
unset RBENV_HOOK_PATH
7474
run rbenvecho"RBENV_HOOK_PATH"
75-
assert_success"${RBENV_ROOT}/rbenv.d:${BATS_TEST_DIRNAME%/*}/rbenv.d:/usr/local/etc/rbenv.d:/etc/rbenv.d:/usr/lib/rbenv/hooks"
75+
assert_success"${RBENV_ROOT}/rbenv.d:${BATS_TEST_DIRNAME}/../rbenv.d:/usr/local/etc/rbenv.d:/etc/rbenv.d:/usr/lib/rbenv/hooks"
7676
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp