Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: #422 prevent export hook setting JAVA_HOME when system #430

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions available-plugins/export/etc/jenv.d/init/export_jenv_hook.bash
Original file line number Diff line number Diff line change
@@ -1,20 +1,32 @@
#export

_jenv_export_hook() {
if ! type -t jenv &>/dev/null
then
return
fi

_jenv_export_hook() {
export JAVA_HOME=$(jenv javahome)
export JENV_FORCEJAVAHOME=
export JENV_FORCEJDKHOME=

local home
if ! home=$(jenv javahome 2>/dev/null)
then
return
fi

export JAVA_HOME=$home
export JENV_FORCEJAVAHOME=true

if [ -e "$JAVA_HOME/bin/javac" ]
then
export JDK_HOME="$JAVA_HOME"
export JENV_FORCEJDKHOME=true
fi
}
}

if ! [[ "$PROMPT_COMMAND" =~ _jenv_export_hook ]]; then
PROMPT_COMMAND="_jenv_export_hook;$PROMPT_COMMAND";
PROMPT_COMMAND="_jenv_export_hook;$PROMPT_COMMAND";
fi


_jenv_export_hook
11 changes: 10 additions & 1 deletion available-plugins/export/etc/jenv.d/init/export_jenv_hook.fish
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,16 @@ function __jenv_export_hook --on-event fish_prompt
if not type -q jenv
return
end
set -gx JAVA_HOME (jenv javahome)

set -gx JENV_FORCEJAVAHOME ""
set -gx JENV_FORCEJDKHOME ""

set -l home ""
if ! set home (jenv javahome 2>/dev/null)
return
end

set -gx JAVA_HOME $home
set -gx JENV_FORCEJAVAHOME true

if test -e "$JAVA_HOME/bin/javac"
Expand Down
21 changes: 17 additions & 4 deletions available-plugins/export/etc/jenv.d/init/export_jenv_hook.zsh
Original file line number Diff line number Diff line change
@@ -1,22 +1,35 @@
#export

_jenv_export_hook() {
export JAVA_HOME=$(jenv javahome)
_jenv_export_hook() {
if ! type -w jenv &>/dev/null
then
return
fi
export JENV_FORCEJAVAHOME=
export JENV_FORCEJDKHOME=

local home
if ! home=$(jenv javahome 2>/dev/null)
then
return
fi

export JAVA_HOME=$home
export JENV_FORCEJAVAHOME=true

if [ -e "$JAVA_HOME/bin/javac" ]
then
export JDK_HOME="$JAVA_HOME"
export JENV_FORCEJDKHOME=true
fi
}
}

#echo "configure export plugin for ZSH"
function install_hook {
emulate -LR zsh
typeset -ag precmd_functions
if [[ -z $precmd_functions[(r)_jenv_export_hook] ]]; then
precmd_functions+=_jenv_export_hook;
precmd_functions+=_jenv_export_hook;
fi
}
install_hook
Expand Down
1 change: 0 additions & 1 deletion libexec/jenv
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ shopt -s nullglob


bin_path="$(abs_dirname "$0")"

if ! samedir "${JENV_ROOT}" "$bin_path/../" ; then
JENV_INSTALL_DIR=$(resolvepath "$bin_path/../")
else
Expand Down
2 changes: 1 addition & 1 deletion libexec/jenv-add
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ if [ -f "${JENV_JAVAPATH}/bin/java" ]; then
esac
fi;

if [ $JAVA_PROVIDER=="sap" ]; then
if [ $JAVA_PROVIDER == "sap" ]; then
JAVA_PLATFORM="64"
else
if ${JENV_JAVAPATH}/bin/java -version 2>&1 | grep -q "64-Bit"; then
Expand Down
3 changes: 1 addition & 2 deletions libexec/jenv-doctor
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ exportVariable(){
# exec jenv shims --short
#fi


if [[ ! -z "$JAVA_HOME" ]] ; then
if [[ -n "$JAVA_HOME" ]] ; then
if [[ -z "$JENV_FORCEJAVAHOME" ]] ; then
cwarn "JAVA_HOME variable already set, scripts that use it directly could not use java version set by jenv"
else
Expand Down
20 changes: 8 additions & 12 deletions libexec/jenv-exec
Original file line number Diff line number Diff line change
Expand Up @@ -26,30 +26,26 @@ if [ "$1" = "--complete" ]; then
exec jenv shims --short
fi

export JENV_VERSION="$(jenv-version-name)"
JENV_COMMAND="$1"

export JENV_OPTIONS="$(jenv-options)"

if [ "$JENV_VERSION" != "system" ]; then
export JAVA_HOME="$JENV_ROOT/versions/$JENV_VERSION"
fi

if [ -z "$JENV_COMMAND" ]; then
jenv-help --usage exec >&2
exit 1
fi

export JENV_VERSION="$(jenv-version-name)"

export JENV_OPTIONS="$(jenv-options)"

export JAVA_HOME=$(jenv-javahome)

JENV_COMMAND_PATH="$(jenv-which "$JENV_COMMAND")"
JENV_BIN_PATH="${JENV_COMMAND_PATH%/*}"
export PATH="${JENV_BIN_PATH}:${PATH}"

for script in $(jenv-hooks exec); do

source "$script"
source "$script"
done

shift 1
if [ "$JENV_VERSION" != "system" ]; then
export PATH="${JENV_BIN_PATH}:${PATH}"
fi
exec -a "$JENV_COMMAND" "$JENV_COMMAND_PATH" $JENV_OPTIONS "$@"
15 changes: 8 additions & 7 deletions libexec/jenv-info
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,21 @@ exportVariable(){

# Provide jenv completions
if [ "$1" = "--complete" ]; then
exec jenv shims --short
exec jenv-shims --short
fi

export JENV_VERSION="$(jenv-version-name)"
export JENV_VERSION
JENV_VERSION="$(jenv-version-name 2>/dev/null)" || :

export JENV_OPTIONS="$(jenv-options)"

JENV_COMMAND="$1"

if [ "$JENV_VERSION" != "system" ]; then
export JAVA_HOME="$JENV_ROOT/versions/$JENV_VERSION"
fi

JENV_COMMAND_PATH="$(jenv-which "$JENV_COMMAND")"
if ! JENV_COMMAND_PATH="$(jenv-which "$JENV_COMMAND")" ; then
echo "Unable to find command $JENV_COMMAND for version $JENV_VERSION" >&2
exit 1
fi
JENV_BIN_PATH="${JENV_COMMAND_PATH%/*}"

for script in $(jenv-hooks exec); do
Expand All @@ -43,7 +44,7 @@ if [ "$JENV_VERSION" != "system" ]; then
fi
echo "Jenv will exec : $JENV_COMMAND_PATH $JENV_OPTIONS $@"
echo "Exported variables :"
echo " JAVA_HOME=$JAVA_HOME"
echo " JAVA_HOME=$(jenv javahome)"
while IFS=':' read -ra ADDR; do
for i in "${ADDR[@]}"; do
if [ -n "$i" ]; then
Expand Down
74 changes: 60 additions & 14 deletions libexec/jenv-javahome
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,70 @@
set -e
[ -n "$JENV_DEBUG" ] && set -x

exportVariable(){
exportedValues="$exportedValues:$1"
export "$1"="$2"
resolve_path() {
local path="$1"
realpath "$path" 2>/dev/null \
|| readlink -f "$path" 2>/dev/null \
|| greadlink -f "$path" 2>/dev/null \
|| { [ -d "$path" ] && (cd -P "$path" && pwd) } \
|| (
local resolver
resolver=$(type -p greadlink 2>/dev/null || type -p readlink 2>/dev/null) || :
local name
while [ -n "$path" ]; do
cd -P "${path%/*}"
name="${path##*/}"
if [ -n "$resolver" ]
then
path="$("$resolver" "$name" || true)"
else
path=""
fi
done

echo "$(pwd)/$name"
)
}

# Provide jenv completions
if [ "$1" = "--complete" ]; then
exec jenv shims --short
fi
version=$JENV_VERSION
[ -z "$version" ] && version="$(jenv-version-name)"

home=""
if [ "$version" = "system" ]; then
if sys_java=$(type -ap java \
| awk '$1 !~ "'"${JENV_ROOT}/shims"'" { print $1; exit }'); then

case "$sys_java" in
/bin/java | /usr/bin/java | /usr/local/bin/java | /sbin/java | /usr/sbin/java | /usr/local/sbin/java)
sys_java="$(resolve_path "$sys_java" 2>/dev/null)"
case "$sys_java" in
/bin/java | /usr/bin/java | /usr/local/bin/java | /sbin/java | /usr/sbin/java | /usr/local/sbin/java)
sys_java=""
;;
*)
;;
esac
;;
*)
;;
esac
fi

export JENV_VERSION="$(jenv-version-name)"
if [ -z "$sys_java" ] && [ -f "/usr/libexec/java_home" ] && [ -x "/usr/libexec/java_home" ]; then
sys_java="$(/usr/libexec/java_home 2>/dev/null)" || true
fi

export JENV_OPTIONS="$(jenv-options)"
if [ -z "$sys_java" ] && type -t update-alternatives >/dev/null; then
sys_java=$(update-alternatives --query java 2>/dev/null | sed -n '/^Best:/{s/Best: *//;s/\/bin\/java//;p;}')
fi

if [ "$JENV_VERSION" == "system" ]; then
echo "Using system JDK, no JAVA_HOME set!"
exit 1
if [ -n "$sys_java" ]; then
home=$(dirname "$(dirname "$sys_java")")
else
home=$JAVA_HOME
fi
else
home="$JENV_ROOT/versions/$version"
fi

export JAVA_HOME="$JENV_ROOT/versions/$JENV_VERSION"
echo "$JAVA_HOME"
echo "$home"
35 changes: 0 additions & 35 deletions libexec/jenv-rehash
Original file line number Diff line number Diff line change
Expand Up @@ -31,41 +31,6 @@ remove_prototype_shim() {
rm -f "$PROTOTYPE_SHIM_PATH"
}

remove_from_path() {
local path_to_remove="$(expand_path "$1")"
local result=""

if [ -z "$path_to_remove" ]; then
echo "${PATH}"
return
fi

local paths
IFS=: paths=($PATH)

for path in "${paths[@]}"; do
path="$(expand_path "$path" || true)"
if [ -n "$path" ] && [ "$path" != "$path_to_remove" ]; then
result="${result}${path}:"
fi
done

echo "${result%:}"
}

expand_path() {
if [ ! -d "$1" ]; then
return 1
fi

local cwd="$(pwd)"
cd "$1"
pwd
cd "$cwd"
}



# The prototype shim file is a script that re-execs itself, passing
# its filename and any arguments to `jenv exec`. This file is
# hard-linked for every executable and then removed. The linking
Expand Down
1 change: 1 addition & 0 deletions libexec/jenv-version-name
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ elif version_exists "${JENV_VERSION#java-}"; then
} >&2
echo "${JENV_VERSION#java-}"
else
echo $JENV_VERSION
echo "jenv: version \`$JENV_VERSION' is not installed" >&2
exit 1
fi
42 changes: 4 additions & 38 deletions libexec/jenv-which
Original file line number Diff line number Diff line change
Expand Up @@ -15,39 +15,6 @@ if [ "$1" = "--complete" ]; then
exec jenv shims --short
fi

expand_path() {
if [ ! -d "$1" ]; then
return 1
fi

local cwd="$(pwd)"
cd "$1"
pwd
cd "$cwd"
}

remove_from_path() {
local path_to_remove="$(expand_path "$1")"
local result=""

if [ -z "$path_to_remove" ]; then
echo "${PATH}"
return
fi

local paths
IFS=: paths=($PATH)

for path in "${paths[@]}"; do
path="$(expand_path "$path" || true)"
if [ -n "$path" ] && [ "$path" != "$path_to_remove" ]; then
result="${result}${path}:"
fi
done

echo "${result%:}"
}

JENV_VERSION="$(jenv-version-name)"
JENV_COMMAND="$1"

Expand All @@ -57,15 +24,14 @@ if [ -z "$JENV_COMMAND" ]; then
fi

if [ "$JENV_VERSION" = "system" ]; then
PATH="$(remove_from_path "${JENV_ROOT}/shims")"
JENV_COMMAND_PATH="$(command -v "$JENV_COMMAND" || true)"
JENV_COMMAND_PATH=$(type -ap "$JENV_COMMAND" \
| awk '$1 !~ "'"${JENV_ROOT}/shims"'" { print $1; exit }') || true
else
JENV_COMMAND_PATH="${JENV_ROOT}/versions/${JENV_VERSION}/bin/${JENV_COMMAND}"
if ! [ -x "$JENV_COMMAND_PATH" ]; then
PATH="$(remove_from_path "${JENV_ROOT}/shims")"
JENV_COMMAND_PATH="$(command -v "$JENV_COMMAND" || true)"
JENV_COMMAND_PATH=$(type -ap "$JENV_COMMAND" \
| awk '$1 !~ "'"${JENV_ROOT}/shims"'" { print $1; exit }') || true
fi

fi

for script in $(jenv-hooks which); do
Expand Down