From c5e019dcc259f0d774f43df9025ffb85ee783bc8 Mon Sep 17 00:00:00 2001 From: Charles Gould Date: Wed, 28 Jun 2023 13:18:40 -0400 Subject: [PATCH] java: bump sdkman-for-fish to v2.0.0 --- fish/completions/sdk.fish | 59 ++++-- fish/conf.d/sdk.fish | 34 +++- fish/fish_plugins | 2 +- fish/functions/__sdkman-noexport-init.sh | 234 +++++++++++++++++++++++ fish/functions/fisher.fish | 4 +- fish/functions/sdk.fish | 6 + 6 files changed, 308 insertions(+), 31 deletions(-) create mode 100644 fish/functions/__sdkman-noexport-init.sh diff --git a/fish/completions/sdk.fish b/fish/completions/sdk.fish index 17fcb7e..7908dc8 100644 --- a/fish/completions/sdk.fish +++ b/fish/completions/sdk.fish @@ -1,11 +1,11 @@ # Defines autocompletion for SDKMAN! -# Copyright (c) 2018 Raphael Reitzig +# Copyright (c) 2018-2023 Raphael Reitzig # MIT License (MIT) # https://github.com/reitzig/sdkman-for-fish # Guard: SDKMAN! needs to be installed -if not test -f "$HOME/.sdkman/bin/sdkman-init.sh" +if not test -f "$SDKMAN_DIR/bin/sdkman-init.sh" exit 0 end @@ -88,14 +88,14 @@ complete -c sdk -f -n '__fish_sdkman_no_command' \ -d 'Install new version' complete -c sdk -f -n '__fish_sdkman_using_command i install' \ -a "(__fish_sdkman_candidates)" +# TODO complete available versions --> issue #4 complete -c sdk -f -n '__fish_sdkman_specifying_candidate i install' \ - # TODO complete available versions --> #4 -a 'a.b.c' \ -d "version list unavailable" complete -c sdk -f -n '__fish_sdkman_specifying_candidate i install' \ -a 'x.y.z' \ - -d "Add your own; specify path!" - # Implicit: complete files as fourth parameter + -d "Specify path to install custom version." +# Implicit: complete files as fourth parameter complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 3 i install' # block @@ -165,16 +165,9 @@ complete -c sdk -f -n '__fish_sdkman_no_command' \ complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 0 v version' # block -# broadcast -complete -c sdk -f -n '__fish_sdkman_no_command' \ - -a 'b broadcast' \ - -d 'Display broadcast message' -complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 0 b broadcast' - # block - # help complete -c sdk -f -n '__fish_sdkman_no_command' \ - -a 'h help' \ + -a 'help' \ -d 'Display help message' complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 0 h help' # block @@ -212,15 +205,39 @@ complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 0 update' # flush complete -c sdk -f -n '__fish_sdkman_no_command' \ -a 'flush' \ - -d 'Clear out caches' -complete -c sdk -f -n '__fish_sdkman_using_command flush' \ - -a 'broadcast' \ - -d 'Re-download news' -complete -c sdk -f -n '__fish_sdkman_using_command flush' \ - -a 'archives' \ - -d 'Remove downloads' + -d 'Clear out archives and temporary storage folders' complete -c sdk -f -n '__fish_sdkman_using_command flush' \ -a 'temp' \ - -d 'Clear installation prep folder' + -d 'Clear out staging work folder' +complete -c sdk -f -n '__fish_sdkman_using_command flush' \ + -a 'version' \ + -d 'Flush version file' complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 1 flush' # block + +# env +complete -c sdk -f -n '__fish_sdkman_no_command' \ + -a 'e env' \ + -d 'Load environment from .sdkmanrc file' +complete -c sdk -f -n '__fish_sdkman_using_command e env' \ + -a 'init' \ + -d 'Initialize .sdkmanrc file' +complete -c sdk -f -n '__fish_sdkman_using_command e env' \ + -a 'install' \ + -d 'Install all candidate versions listed in .sdkmanrc' +complete -c sdk -f -n '__fish_sdkman_using_command e env' \ + -a 'clear' \ + -d 'Unload currently loaded environment' +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 1 e env' + # block + +# home +complete -c sdk -f -n '__fish_sdkman_no_command' \ + -a 'h home' \ + -d 'Show installation folder of given candidate' +complete -c sdk -f -n '__fish_sdkman_using_command h home' \ + -a "(__fish_sdkman_candidates_with_versions)" +complete -c sdk -f -n '__fish_sdkman_specifying_candidate h home' \ + -a "(__fish_sdkman_installed_versions)" +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 2 h home' + # block diff --git a/fish/conf.d/sdk.fish b/fish/conf.d/sdk.fish index 507b212..91677cb 100644 --- a/fish/conf.d/sdk.fish +++ b/fish/conf.d/sdk.fish @@ -3,12 +3,23 @@ # Makes command and binaries from SDKMAN! available in fish. # Delegates to bash for the `sdk` command. -# Copyright (c) 2018 Raphael Reitzig +# Copyright (c) 2018-2023 Raphael Reitzig # MIT License (MIT) # https://github.com/reitzig/sdkman-for-fish -set __fish_sdkman_init "$HOME/.sdkman/bin/sdkman-init.sh" -set __fish_sdkman_noexport_init "$HOME/.config/fisher/github.com/reitzig/sdkman-for-fish/sdkman-noexport-init.sh" +# Account for custom install locations +if set -q __sdkman_custom_dir + set -gx SDKMAN_DIR "$__sdkman_custom_dir" +else + # This is the default location: + set -gx SDKMAN_DIR "$HOME/.sdkman" +end + +set __fish_sdkman_init "$SDKMAN_DIR/bin/sdkman-init.sh" + +# Copied from https://github.com/jorgebucaran/fisher/blob/main/functions/fisher.fish to be consistent: +set --query fisher_path || set --local fisher_path $__fish_config_dir +set __fish_sdkman_noexport_init "$fisher_path/functions/__sdkman-noexport-init.sh" # Guard: SDKMAN! needs to be installed if not test -f "$__fish_sdkman_init" @@ -42,7 +53,8 @@ function __fish_sdkman_run_in_bash 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! + echo \"SDKMAN_OFFLINE_MODE=\${SDKMAN_OFFLINE_MODE}\" >> $pipe; + echo \"SDKMAN_ENV=\${SDKMAN_ENV}\" >> $pipe" # it's not an environment variable! set bashDump (cat $pipe; rm $pipe) set sdkStatus $bashDump[1] @@ -65,7 +77,7 @@ function __fish_sdkman_run_in_bash if test -n value set -gx $var $value - # Note: This makes SDKMAN_OFFLINE_MODE an environment variable. + # Note: This makes SDKMAN_{OFFLINE_MODE,ENV} environment variables. # That gives it the behaviour we _want_! end end @@ -77,8 +89,16 @@ end # 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 (ls -ld "$SDKMAN_DIR" | awk '{print $3}') != (whoami) - set -e SDKMAN_DIR +if not set -q SDKMAN_CANDIDATES_DIR; or test (ls -ld "$SDKMAN_CANDIDATES_DIR" | awk '{print $3}') != (whoami) __fish_sdkman_run_in_bash "source $__fish_sdkman_init" end +# Set up auto_env +if grep -q "^sdkman_auto_env=true" "$SDKMAN_DIR/etc/config" + function __fish_sdkman_autoenv --on-variable PWD + # Run the (modified) init script, which performs the checks and calls for us! + __fish_sdkman_run_in_bash "source \"$__fish_sdkman_noexport_init\"" + + set -x SDKMAN_OLD_PWD "$PWD" # needed by the Bash implementation + end +end diff --git a/fish/fish_plugins b/fish/fish_plugins index 3848120..62ef877 100644 --- a/fish/fish_plugins +++ b/fish/fish_plugins @@ -2,4 +2,4 @@ jorgebucaran/fisher jorgebucaran/nvm.fish jorgebucaran/replay.fish lilyball/nix-env.fish -reitzig/sdkman-for-fish@v1.4.0 +reitzig/sdkman-for-fish@v2.0.0 diff --git a/fish/functions/__sdkman-noexport-init.sh b/fish/functions/__sdkman-noexport-init.sh new file mode 100644 index 0000000..ba7520a --- /dev/null +++ b/fish/functions/__sdkman-noexport-init.sh @@ -0,0 +1,234 @@ +#!/usr/bin/env bash + +# +# Copyright 2021 Marco Vermeulen +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# set env vars if not set +if [ -z "$SDKMAN_VERSION" ]; then +: +fi + +if [ -z "$SDKMAN_CANDIDATES_API" ]; then +: +fi + +if [ -z "$SDKMAN_DIR" ]; then +: +fi + +# Load the sdkman config if it exists. +if [ -f "${SDKMAN_DIR}/etc/config" ]; then + source "${SDKMAN_DIR}/etc/config" +fi + +# infer platform +function infer_platform() { + local kernel + local machine + + kernel="$(uname -s)" + machine="$(uname -m)" + + case $kernel in + Linux) + case $machine in + i686) + echo "LinuxX32" + ;; + x86_64) + echo "LinuxX64" + ;; + armv6l) + echo "LinuxARM32HF" + ;; + armv7l) + echo "LinuxARM32HF" + ;; + armv8l) + echo "LinuxARM32HF" + ;; + aarch64) + echo "LinuxARM64" + ;; + *) + echo "Exotic" + ;; + esac + ;; + Darwin) + case $machine in + x86_64) + echo "DarwinX64" + ;; + arm64) + if [[ "$sdkman_rosetta2_compatible" == 'true' ]]; then + echo "DarwinX64" + else + echo "DarwinARM64" + fi + ;; + *) + echo "DarwinX64" + ;; + esac + ;; + *) + echo "$kernel" + esac +} + +SDKMAN_PLATFORM="$(infer_platform | tr '[:upper:]' '[:lower:]')" +: + +# OS specific support (must be 'true' or 'false'). +cygwin=false +darwin=false +solaris=false +freebsd=false +SDKMAN_KERNEL="$(uname -s)" +case "${SDKMAN_KERNEL}" in + CYGWIN*) + cygwin=true + ;; + Darwin*) + darwin=true + ;; + SunOS*) + solaris=true + ;; + FreeBSD*) + freebsd=true +esac + +# Determine shell +zsh_shell=false +bash_shell=false + +if [[ -n "$ZSH_VERSION" ]]; then + zsh_shell=true +elif [[ -n "$BASH_VERSION" ]]; then + bash_shell=true +fi + +# Source sdkman module scripts and extension files. +# +# Extension files are prefixed with 'sdkman-' and found in the ext/ folder. +# Use this if extensions are written with the functional approach and want +# to use functions in the main sdkman script. For more details, refer to +# . +OLD_IFS="$IFS" +IFS=$'\n' +scripts=($(find "${SDKMAN_DIR}/src" "${SDKMAN_DIR}/ext" -type f -name 'sdkman-*.sh')) +for f in "${scripts[@]}"; do + source "$f" +done +IFS="$OLD_IFS" +unset OLD_IFS scripts f + +# Create upgrade delay file if it doesn't exist +if [[ ! -f "${SDKMAN_DIR}/var/delay_upgrade" ]]; then + touch "${SDKMAN_DIR}/var/delay_upgrade" +fi + +# set curl connect-timeout and max-time +if [[ -z "$sdkman_curl_connect_timeout" ]]; then sdkman_curl_connect_timeout=7; fi +if [[ -z "$sdkman_curl_max_time" ]]; then sdkman_curl_max_time=10; fi + +# set curl retry +if [[ -z "${sdkman_curl_retry}" ]]; then sdkman_curl_retry=0; fi + +# set curl retry max time in seconds +if [[ -z "${sdkman_curl_retry_max_time}" ]]; then sdkman_curl_retry_max_time=60; fi + +# set curl to continue downloading automatically +if [[ -z "${sdkman_curl_continue}" ]]; then sdkman_curl_continue=true; fi + +# read list of candidates and set array +SDKMAN_CANDIDATES_CACHE="${SDKMAN_DIR}/var/candidates" +SDKMAN_CANDIDATES_CSV=$(<"$SDKMAN_CANDIDATES_CACHE") +__sdkman_echo_debug "Setting candidates csv: $SDKMAN_CANDIDATES_CSV" +if [[ "$zsh_shell" == 'true' ]]; then + SDKMAN_CANDIDATES=(${(s:,:)SDKMAN_CANDIDATES_CSV}) +else + IFS=',' read -a SDKMAN_CANDIDATES <<< "${SDKMAN_CANDIDATES_CSV}" +fi + +: + +for candidate_name in "${SDKMAN_CANDIDATES[@]}"; do + candidate_dir="${SDKMAN_CANDIDATES_DIR}/${candidate_name}/current" + if [[ -h "$candidate_dir" || -d "${candidate_dir}" ]]; then +: +: + fi +done +unset candidate_name candidate_dir +: + +# source completion scripts +if [[ "$sdkman_auto_complete" == 'true' ]]; then + if [[ "$zsh_shell" == 'true' ]]; then + # initialize zsh completions (if not already done) + if ! (( $+functions[compdef] )) ; then + autoload -Uz compinit + if [[ $ZSH_DISABLE_COMPFIX == 'true' ]]; then + compinit -u -C + else + compinit + fi + fi + autoload -U bashcompinit + bashcompinit + source "${SDKMAN_DIR}/contrib/completion/bash/sdk" + __sdkman_echo_debug "ZSH completion script loaded..." + elif [[ "$bash_shell" == 'true' ]]; then + source "${SDKMAN_DIR}/contrib/completion/bash/sdk" + __sdkman_echo_debug "Bash completion script loaded..." + else + __sdkman_echo_debug "No completion scripts found for $SHELL" + fi +fi + +if [[ "$sdkman_auto_env" == "true" ]]; then + if [[ "$zsh_shell" == "true" ]]; then + function sdkman_auto_env() { + if [[ -n $SDKMAN_ENV ]] && [[ ! $PWD =~ ^$SDKMAN_ENV ]]; then + sdk env clear + fi + if [[ -f .sdkmanrc ]]; then + sdk env + fi + } + + chpwd_functions+=(sdkman_auto_env) + else + function sdkman_auto_env() { + if [[ -n $SDKMAN_ENV ]] && [[ ! $PWD =~ ^$SDKMAN_ENV ]]; then + sdk env clear + fi + if [[ "$SDKMAN_OLD_PWD" != "$PWD" ]] && [[ -f ".sdkmanrc" ]]; then + sdk env + fi + +: + } + + trimmed_prompt_command="${PROMPT_COMMAND%"${PROMPT_COMMAND##*[![:space:]]}"}" + [[ -z "$trimmed_prompt_command" ]] && PROMPT_COMMAND="sdkman_auto_env" || PROMPT_COMMAND="${trimmed_prompt_command%\;};sdkman_auto_env" + fi + + sdkman_auto_env +fi diff --git a/fish/functions/fisher.fish b/fish/functions/fisher.fish index c0a86fa..1aec671 100644 --- a/fish/functions/fisher.fish +++ b/fish/functions/fisher.fish @@ -13,8 +13,8 @@ function fisher --argument-names cmd --description "A plugin manager for Fish" echo " fisher update Update all installed plugins" echo " fisher list [] List installed plugins matching regex" echo "Options:" - echo " -v or --version Print version" - echo " -h or --help Print this help message" + echo " -v, --version Print version" + echo " -h, --help Print this help message" echo "Variables:" echo " \$fisher_path Plugin installation path. Default: $__fish_config_dir" | string replace --regex -- $HOME \~ case ls list diff --git a/fish/functions/sdk.fish b/fish/functions/sdk.fish index 1bc2a16..25def1f 100644 --- a/fish/functions/sdk.fish +++ b/fish/functions/sdk.fish @@ -1,3 +1,9 @@ +# Wrapper function for SDKMAN! + +# Copyright (c) 2018-2023 Raphael Reitzig +# MIT License (MIT) +# https://github.com/reitzig/sdkman-for-fish + function sdk -d "Manage SDKs" # Guard: SDKMAN! needs to be installed if not test -f "$__fish_sdkman_init"