From 415c2a0bb22efadf9b01dad20af716e777281083 Mon Sep 17 00:00:00 2001 From: Raphael Reitzig <4246780+reitzig@users.noreply.github.com> Date: Tue, 5 Nov 2019 03:37:16 +0100 Subject: [PATCH 1/4] Fix reinitialization test. --- conf.d/sdk.fish | 21 +++++++++++---------- test/reinitialize.fish | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/conf.d/sdk.fish b/conf.d/sdk.fish index aeb54ea..c752901 100644 --- a/conf.d/sdk.fish +++ b/conf.d/sdk.fish @@ -15,11 +15,11 @@ if not test -f "$__fish_sdkman_init" exit 0 end -# Hack for issue #19: +# 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" \ @@ -31,15 +31,15 @@ end # Returns the same status code as the given command. function __fish_sdkman_run_in_bash # We need to leave stdin and stdout of sdk free for user interaction. - # So, pipe relevant environment variables (which might have changed) + # So, pipe relevant environment variables (which might have changed) # through a file. # But since now getting the exit code of sdk itself is a hassle, # pipe it as well. # # TODO: Can somebody get this to work without the overhead of a file? set pipe (mktemp) - bash -c "$argv[1]; - echo -e \"\$?\" > $pipe; + bash -c "$argv[1]; + echo -e \"\$?\" > $pipe; env | grep -e '^SDKMAN_\|^PATH' >> $pipe; env | grep -i -E \"^(`echo \${SDKMAN_CANDIDATES_CSV} | sed 's/,/|/g'`)_HOME\" >> $pipe; echo \"SDKMAN_OFFLINE_MODE=\${SDKMAN_OFFLINE_MODE}\" >> $pipe" # it's not an environment variable! @@ -48,14 +48,14 @@ function __fish_sdkman_run_in_bash set sdkStatus $bashDump[1] set bashEnv $bashDump[2..-1] - # If SDKMAN! succeeded, copy relevant environment variables + # If SDKMAN! succeeded, copy relevant environment variables # to the current shell (they might have changed) if [ $sdkStatus = 0 ] for line in $bashEnv set parts (string split "=" $line) set var $parts[1] set value (string join "=" $parts[2..-1]) - + switch "$var" case "PATH" # Special treatment: need fish list instead @@ -74,10 +74,11 @@ function __fish_sdkman_run_in_bash return $sdkStatus end -# If this is a subshell of a(n initialized) fish owned by the same user, -# no initialization necessary. +# If this is a subshell of a(n initialized) fish owned by the same user, +# no initialization necessary. # Otherwise: if not set -q SDKMAN_DIR; or test (stat -c "%U" $SDKMAN_DIR) != (whoami) + set -e SDKMAN_DIR __fish_sdkman_run_in_bash "source $__fish_sdkman_init" end diff --git a/test/reinitialize.fish b/test/reinitialize.fish index 23cb921..50543aa 100755 --- a/test/reinitialize.fish +++ b/test/reinitialize.fish @@ -16,7 +16,7 @@ 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" From e503300b8a8afff7a89535741e59e20062426efd Mon Sep 17 00:00:00 2001 From: Raphael Reitzig <4246780+reitzig@users.noreply.github.com> Date: Tue, 5 Nov 2019 04:03:32 +0100 Subject: [PATCH 2/4] Fix PATH zombie test --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c4fa685..2b34781 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,4 +21,4 @@ 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 From 47ec1e3847d56ea340f2f2183b5652d36eac8972 Mon Sep 17 00:00:00 2001 From: Raphael Reitzig <4246780+reitzig@users.noreply.github.com> Date: Tue, 5 Nov 2019 03:37:16 +0100 Subject: [PATCH 3/4] Add test for issue #26 Require to offer installation of SDKMAN! --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 2b34781..c588bbe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,3 +22,4 @@ script: - fish test/wrapper.fish - fish test/reinitialize.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" From e41ccb9ce87b04f35c82d56dd37824883dd7adb5 Mon Sep 17 00:00:00 2001 From: Raphael Reitzig <4246780+reitzig@users.noreply.github.com> Date: Tue, 5 Nov 2019 02:36:22 +0100 Subject: [PATCH 4/4] Offer to install SDKMAN! if not already installed. Fixes issue #26 Also: - Change language in README to clarify that SDKMAN! is not included. - Polishes to `.editorconfig`. --- .editorconfig | 9 ++++++++- README.md | 9 ++++++--- functions/sdk.fish | 41 ++++++++++++++++++++++++++++++++++------- test/reinitialize.fish | 2 ++ 4 files changed, 50 insertions(+), 11 deletions(-) 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/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/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 50543aa..564e74b 100755 --- a/test/reinitialize.fish +++ b/test/reinitialize.fish @@ -23,3 +23,5 @@ begin exit 1 end end + +# TODO: add test that fails if `test` in conf.d/sdk.fish:80 errors (cf issue #28 et al.)