Automatically execute sdk env when entering a directory with an .sdkmanrc (#757)

Add auto-env functionality.

Authored-by: Oliver Weiler <oliver.weiler@meinestadt.de>
This commit is contained in:
Oliver Weiler
2020-05-04 09:11:33 +02:00
committed by Marco Vermeulen
parent ade991ab08
commit bcb97dcca5
2 changed files with 54 additions and 0 deletions

View File

@@ -128,3 +128,21 @@ for candidate_name in "${SDKMAN_CANDIDATES[@]}"; do
done
unset candidate_name candidate_dir
export PATH
if [[ "$sdkman_auto_env" == "true" ]]; then
if [[ "$zsh_shell" == "true" ]]; then
function sdkman_auto_env() {
[[ -f ".sdkmanrc" ]] && sdk env
}
chpwd_functions+=(sdkman_auto_env)
else
function sdkman_auto_env() {
[[ "$SDKMAN_OLD_PWD" != "$PWD" ]] && [[ -f ".sdkmanrc" ]] && sdk env
export SDKMAN_OLD_PWD="$PWD"
}
[[ -z "$PROMPT_COMMAND" ]] && PROMPT_COMMAND="sdkman_auto_env" || PROMPT_COMMAND="${PROMPT_COMMAND%\;};sdkman_auto_env"
fi
fi

View File

@@ -1,6 +1,7 @@
package sdkman.specs
import sdkman.support.SdkmanEnvSpecification
import spock.lang.Unroll
import java.nio.file.Paths
@@ -91,6 +92,41 @@ class EnvCommandSpec extends SdkmanEnvSpecification {
]
}
def "should execute 'sdk env' when entering a directory with an .sdkmanrc"() {
given:
new FileTreeBuilder(candidatesDirectory).with {
"groovy" {
"2.4.1" {}
}
}
bash = sdkmanBashEnvBuilder
.withVersionCache("x.y.z")
.withOfflineMode(true)
.withConfiguration("sdkman_auto_env", sdkmanAutoEnv)
.build()
new FileTreeBuilder(bash.workDir).with {
"project" {
".sdkmanrc"("groovy=2.4.1\n")
}
}
bash.start()
bash.execute("source $bootstrapScript")
when:
bash.execute("cd project")
then:
verifyOutput(bash.output)
where:
sdkmanAutoEnv | verifyOutput
'true' | { it.contains("Using groovy version 2.4.1 in this shell") }
'false' | { !it.contains("Using groovy version 2.4.1 in this shell") }
}
def "should issue an error if .sdkmanrc contains a malformed candidate version"() {
given:
bash = sdkmanBashEnvBuilder