diff --git a/.editorconfig b/.editorconfig index 0009889..4110381 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,5 +1,12 @@ +root = true + [*] +charset = utf-8 +end_of_line = lf indent_style = space -indent_size = 2 +indent_size = 4 trim_trailing_whitespace = true insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.travis.yml b/.travis.yml index baadae1..4db3e3d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,4 +47,5 @@ script: - ruby test/completion.rb - fish test/wrapper.fish - fish test/reinitialize.fish - - bash -c "sdk install crash 1.3.0; sdk uninstall crash 1.3.0"; fish test/10_zombies_new.fish + - bash -c "source ${HOME}/.sdkman/bin/sdkman-init.sh && sdk install crash 1.3.0 && sdk uninstall crash 1.3.0" && fish test/10_zombies_new.fish + - bash -c "rm -rf ~/.sdkman && sed -i 's/^.*\(sdkman\|SDKMAN\).*$//g' ~/.bashrc && echo 'SDKMAN uninstalled'" && fish -c "echo 'y' | sdk" && fish -c "sdk version" diff --git a/README.md b/README.md index c59d15b..c5ace6f 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ [![Build Status][travis-badge]][travis-link] -Makes command `sdk` from [SDKMAN!] available in fish. -Also provides auto-completion and adds binaries from installed SDKs to the PATH. +Makes command `sdk` from [SDKMAN!] usable from fish, including auto-completion. +Also adds binaries from installed SDKs to the PATH. Tested with fish 2.7.1 and 3.0.2, and SDKMAN! 5.7.3. @@ -15,7 +15,10 @@ With [fisher] (install separately): fisher add reitzig/sdkman-for-fish ``` -_Note:_ Only compatible with fisher v3 upwards; v2 is no longer supported. +_Note:_ + + - Only compatible with fisher v3 upwards; v2 is no longer supported. + - You have to install [SDKMAN!] separately. ## Usage diff --git a/conf.d/sdk.fish b/conf.d/sdk.fish index d8b9a37..ad7f981 100644 --- a/conf.d/sdk.fish +++ b/conf.d/sdk.fish @@ -18,8 +18,8 @@ end # Hack for issue #19: # Create version of sdkman-init that doesn't export any environment variables. # Refresh if sdkman-init changed. -if begin not test -f "$__fish_sdkman_noexport_init"; - or env test "$__fish_sdkman_init" -nt "$__fish_sdkman_noexport_init" +if begin not test -f "$__fish_sdkman_noexport_init"; + or env test "$__fish_sdkman_init" -nt "$__fish_sdkman_noexport_init" end mkdir -p (dirname $__fish_sdkman_noexport_init) sed -e 's/^\(\s*\).*\(export\|to_path\).*$/\1:/g' "$__fish_sdkman_init" \ @@ -78,6 +78,7 @@ end # no initialization necessary. # Otherwise: if not set -q SDKMAN_DIR; or test (ls -ld "$SDKMAN_DIR" | awk '{print $3}') != (whoami) + set -e SDKMAN_DIR __fish_sdkman_run_in_bash "source $__fish_sdkman_init" end diff --git a/functions/sdk.fish b/functions/sdk.fish index 8a5dd8d..1bc2a16 100644 --- a/functions/sdk.fish +++ b/functions/sdk.fish @@ -1,9 +1,36 @@ -# Guard: SDKMAN! needs to be installed -if not test -f "$__fish_sdkman_init" - exit 0 -end - -# Declare the sdk command for fish function sdk -d "Manage SDKs" - __fish_sdkman_run_in_bash "source \"$__fish_sdkman_noexport_init\" && sdk $argv" + # Guard: SDKMAN! needs to be installed + if not test -f "$__fish_sdkman_init" + # Propose to install SDKMAN! + + function read_confirm + while true + read -l -P "$argv[1] [y/N] " confirm + + switch $confirm + case Y y + return 0 + case '' N n + return 1 + end + end + end + + if read_confirm "You don't seem to have SDKMAN! installed. Install now?" + if not which curl > /dev/null + echo "curl required" + return 1 + end + if not which bash > /dev/null + echo "bash required" + return 1 + end + + curl -s "https://get.sdkman.io" | bash | sed '/All done!/q' + echo "Please open a new terminal/shell to load SDKMAN!" + end + else + # Declare the _actual_ sdk command for fish + __fish_sdkman_run_in_bash "source \"$__fish_sdkman_noexport_init\" && sdk $argv" + end end diff --git a/test/reinitialize.fish b/test/reinitialize.fish index 23cb921..564e74b 100755 --- a/test/reinitialize.fish +++ b/test/reinitialize.fish @@ -16,10 +16,12 @@ begin end begin - set SDKMAN_DIR "/" # belongs to root, who hopefully doesn't run this + set -x SDKMAN_DIR "/" # belongs to root, who hopefully doesn't run this set in_new_shell (fish -lc 'echo $SDKMAN_DIR') if [ "$in_new_shell" != "$proper_value" ] echo "SDKMAN_DIR reinitialized to $in_new_shell instead of $proper_value" exit 1 end end + +# TODO: add test that fails if `test` in conf.d/sdk.fish:80 errors (cf issue #28 et al.)