From 7c7232c0b64fed610ea6eebeabb751fdf9cf1eca Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Thu, 22 Feb 2024 16:03:22 +1100 Subject: [PATCH 01/19] feat: support ordered install mode --- lib/functions/installs.bash | 77 +++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 17 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 036c1dab9..d2ca1f866 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -11,12 +11,37 @@ handle_cancel() { } install_command() { - local plugin_name=$1 - local full_version=$2 - local extra_args="${*:3}" + local argct + argct=0 + + local plugin_name + local full_version + local ordered_install + ordered_install=false + + # parse input arguments and flags + for arg in "$@" + do + if [[ "$arg" == --* ]]; then + # flag + if [[ "$arg" == "--ordered-install" ]]; then + ordered_install=true + fi + else + # non flag + if [[ "$argct" -eq 0 ]]; then + plugin_name=$arg + elif [[ "$argct" -eq 1 ]]; then + full_version=$arg + else + extra_args="$extra_args $arg" + fi + ((argct++)) + fi + done if [ "$plugin_name" = "" ] && [ "$full_version" = "" ]; then - install_local_tool_versions "$extra_args" + install_local_tool_versions "$ordered_install" "$extra_args" elif [[ $# -eq 1 ]]; then install_one_local_tool "$plugin_name" else @@ -85,6 +110,9 @@ install_local_tool_versions() { local tool_versions_path tool_versions_path=$(find_tool_versions) + local ordered_install + ordered_install=$1 + # Locate all the plugins installed in the system local plugins_installed if find "$plugins_path" -mindepth 1 -type d &>/dev/null; then @@ -118,19 +146,34 @@ install_local_tool_versions() { fi if [ -n "$plugins_installed" ]; then - for plugin_name in $plugins_installed; do - local plugin_version_and_path - plugin_version_and_path="$(find_versions "$plugin_name" "$search_path")" - - if [ -n "$plugin_version_and_path" ]; then - local plugin_version - some_tools_installed='yes' - plugin_versions=$(cut -d '|' -f 1 <<<"$plugin_version_and_path") - for plugin_version in $plugin_versions; do - install_tool_version "$plugin_name" "$plugin_version" - done - fi - done + if [ "$ordered_install" == true ]; then + # ordered install mode allows the tools to be installed + # in the order that they are listed in the .tool-versions file. + # This mode only supports .tool-versions file AND it will only + # use the .tool-versions from the current directory (i.e. won't scan higher directories) + echo "using ordered install..." + tool_versions=$(strip_tool_version_comments "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME") + while IFS=' ' read -r tool_version; do + IFS=' ' read -ra parts <<< "$tool_version" + plugin_name=${parts[0]} + plugin_version=${parts[1]} + install_tool_version "$plugin_name" "$plugin_version" + done <<< $tool_versions + else + for plugin_name in $plugins_installed; do + local plugin_version_and_path + plugin_version_and_path="$(find_versions "$plugin_name" "$search_path")" + + if [ -n "$plugin_version_and_path" ]; then + local plugin_version + some_tools_installed='yes' + plugin_versions=$(cut -d '|' -f 1 <<<"$plugin_version_and_path") + for plugin_version in $plugin_versions; do + install_tool_version "$plugin_name" "$plugin_version" + done + fi + done + fi fi if [ -z "$some_tools_installed" ]; then From 05718d48b2e38d552d4c4a0cc898006f9fa48f83 Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Wed, 28 Feb 2024 17:00:00 +1100 Subject: [PATCH 02/19] feat: refine ordered install mode --- lib/functions/installs.bash | 243 +++++++++++++++++++++++++++--------- 1 file changed, 185 insertions(+), 58 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index d2ca1f866..d96b876ba 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -11,37 +11,12 @@ handle_cancel() { } install_command() { - local argct - argct=0 - - local plugin_name - local full_version - local ordered_install - ordered_install=false - - # parse input arguments and flags - for arg in "$@" - do - if [[ "$arg" == --* ]]; then - # flag - if [[ "$arg" == "--ordered-install" ]]; then - ordered_install=true - fi - else - # non flag - if [[ "$argct" -eq 0 ]]; then - plugin_name=$arg - elif [[ "$argct" -eq 1 ]]; then - full_version=$arg - else - extra_args="$extra_args $arg" - fi - ((argct++)) - fi - done + local plugin_name=$1 + local full_version=$2 + local extra_args="${*:3}" if [ "$plugin_name" = "" ] && [ "$full_version" = "" ]; then - install_local_tool_versions "$ordered_install" "$extra_args" + install_local_tool_versions "$extra_args" elif [[ $# -eq 1 ]]; then install_one_local_tool "$plugin_name" else @@ -130,6 +105,7 @@ install_local_tool_versions() { fi # Locate all the plugins defined in the versions file. + # This just checks the current directory local tools_file if [ -f "$tool_versions_path" ]; then tools_file=$(strip_tool_version_comments "$tool_versions_path" | cut -d ' ' -f 1) @@ -145,38 +121,14 @@ install_local_tool_versions() { exit 1 fi + local tools_installed if [ -n "$plugins_installed" ]; then - if [ "$ordered_install" == true ]; then - # ordered install mode allows the tools to be installed - # in the order that they are listed in the .tool-versions file. - # This mode only supports .tool-versions file AND it will only - # use the .tool-versions from the current directory (i.e. won't scan higher directories) - echo "using ordered install..." - tool_versions=$(strip_tool_version_comments "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME") - while IFS=' ' read -r tool_version; do - IFS=' ' read -ra parts <<< "$tool_version" - plugin_name=${parts[0]} - plugin_version=${parts[1]} - install_tool_version "$plugin_name" "$plugin_version" - done <<< $tool_versions - else - for plugin_name in $plugins_installed; do - local plugin_version_and_path - plugin_version_and_path="$(find_versions "$plugin_name" "$search_path")" - - if [ -n "$plugin_version_and_path" ]; then - local plugin_version - some_tools_installed='yes' - plugin_versions=$(cut -d '|' -f 1 <<<"$plugin_version_and_path") - for plugin_version in $plugin_versions; do - install_tool_version "$plugin_name" "$plugin_version" - done - fi - done - fi + plugins_installed=$(printf "%s" "$plugins_installed" | tr "\n" " " | awk '{$1=$1};1') + display_debug "install_local_tool_versions: plugins_installed='$plugins_installed'" + tools_installed=$(install_directory_tools_recursive "$search_path" "$plugins_installed") fi - if [ -z "$some_tools_installed" ]; then + if [ -z "$tools_installed" ]; then printf "Either specify a tool & version in the command\n" printf "OR add .tool-versions file in this directory\n" printf "or in a parent directory\n" @@ -184,6 +136,131 @@ install_local_tool_versions() { fi } +install_directory_tools_recursive() { + local search_path=$1 + local plugins_installed=$2 + local tools_installed="" + + display_debug "install_directory_tools_recursive '$search_path': entered with plugins_installed='$plugins_installed'" + + while [ "$search_path" != "/" ]; do + # install tools from files in current directory + display_debug "--------------------------------------------------------------------------------------------------------------" + tools_installed=$(install_directory_tools "$search_path" "$plugins_installed" "$tools_installed") + display_debug "install_directory_tools_recursive '$search_path': install_directory_tools returned tools_installed='$tools_installed'" + + # terminate if all tools are installed + if [[ -n $(stringlist_same_length "$plugins_installed" "$tools_installed") ]]; then + display_debug "install_directory_tools_recursive '$search_path': exiting as tools_installed has same length as plugins_installed: tools_installed='$tools_installed', plugins_installed='$plugins_installed'" + printf "%s\n" "$tools_installed" + return 0 + fi + + # go up a directory + search_path=$(dirname "$search_path") + done + + printf "%s\n" "$tools_installed" +} + +install_directory_tools() { + local search_path=$1 + local plugins_installed=$2 + local tools_installed=$3 + display_debug "install_directory_tools '$search_path': starting install. tools_installed='$tools_installed'" + + # install tools from .tool-versions + # install order is the order listed in .tool-versions + local tool_versions + file_name=$(asdf_tool_versions_filename) + if ! [[ -f "$search_path/$file_name" ]]; then + display_debug "install_directory_tools '$search_path': exiting early... $file_name file not found" + printf "%s\n" "$tools_installed" + return 0 + fi + + tool_versions=$(strip_tool_version_comments "$search_path/$file_name" | awk '{$1=$1};1') + if [[ -z $tool_versions ]]; then + display_debug "install_directory_tools '$search_path': exiting early... no tools found in directory" + printf "%s\n" "$tools_installed" + return 0 + fi + while IFS=' ' read -r tool_version; do + display_debug "install_directory_tools '$search_path': found '$tool_version'" + + # read one version from the file + IFS=' ' read -ra parts <<< "$tool_version" + local plugin_name + plugin_name=${parts[0]} + local plugin_version + plugin_version=${parts[1]} + + # skip if plugin is installed already + if [[ -n $(stringlist_contains "$tools_installed" "$plugin_name") ]]; then + display_debug "install_directory_tools '$search_path': '$plugin_name' is already installed... skipping" + continue + fi + + # install the version + display_none $(install_tool_version "$plugin_name" "$plugin_version") + tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') + + display_debug "install_directory_tools '$search_path': installed '$plugin_name':'$plugin_version' new state of tools_installed='$tools_installed'" + done <<< $tool_versions + + # TODO when should we resolve tool version from the environment ? + + # install tools from legacy version files + # install order is plugin order which is alphabetical + local legacy_config + legacy_config=$(get_asdf_config_value "legacy_version_file") + if [ "$legacy_config" = "yes" ]; then + display_debug "install_directory_tools '$search_path': resolving legacy files" + local plugin_name + for plugin_name in $plugins_installed; do + # skip if plugin is installed already + if [[ -n $(stringlist_contains "$tool_versions" "$plugin_name") ]]; then + display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: skipping as tool was already installed" + continue + fi + + # extract plugin legacy information + local plugin_path + plugin_path=$(get_plugin_path "$plugin_name") + local legacy_list_filenames_script + legacy_list_filenames_script="${plugin_path}/bin/list-legacy-filenames" + + # skip if no legacy_list_filenames_script available + if ! [[ -f "$legacy_list_filenames_script" ]]; then + display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: skipping as legacy files are not supported" + continue + fi + + # extract plugin legacy filenames + local legacy_filenames="" + legacy_filenames=$("$legacy_list_filenames_script") + + # lookup plugin version in current dir + local plugin_version + plugin_version=$(get_legacy_version_in_dir "$plugin_name" "$search_path" "$legacy_filenames") + + # skip if version cannot be found + if [ -z "$plugin_version" ]; then + display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: skipping as version cannot be found" + continue + fi + + display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: plugin_version='$plugin_version'" + display_none $(install_tool_version "$plugin_name" "$plugin_version") + + tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') + display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: installed '$plugin_version' new state of tools_installed='$tools_installed'" + done + fi + + printf "%s\n" "$tools_installed" +} + install_tool_version() { local plugin_name=$1 local full_version=$2 @@ -296,3 +373,53 @@ install_tool_version() { fi fi } + +get_legacy_version_in_dir() { + local plugin_name=$1 + local search_path=$2 + local legacy_filenames=$3 + + local asdf_version + for filename in $legacy_filenames; do + local legacy_version + legacy_version=$(parse_legacy_version_file "$search_path/$filename" "$plugin_name") + + if [ -n "$legacy_version" ]; then + printf "%s\n" "$legacy_version" + return 0 + fi + done +} + + +stringlist_same_length() { + IFS=' ' read -r -a array1 <<< "$1" + IFS=' ' read -r -a array2 <<< "$2" + if [[ ${#array1[@]} -eq ${#array2[@]} ]]; then + printf "true\n" + return 0 + fi +} + +stringlist_contains() { + local list=$1 + local search=$2 + local array + IFS=' ' read -r -a array <<< "$list" + for item in "${array[@]}"; do + if [ $item = $search ]; then + printf "true\n" + return 0 + fi + done +} + +display_debug() { + if [[ $DEBUG = "true" ]]; then + printf "debug: %s\n" "$1" >&2 + fi +} + +display_none() { + printf "" +} \ No newline at end of file From cf718b200ae4658015a436a25472ebf582c20d74 Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Thu, 29 Feb 2024 15:15:26 +1100 Subject: [PATCH 03/19] chore: small refactor + bug fix --- lib/functions/installs.bash | 111 +++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 46 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index d96b876ba..5e30c7dd0 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -171,22 +171,41 @@ install_directory_tools() { # install tools from .tool-versions # install order is the order listed in .tool-versions + tools_installed=$(install_directory_tools_tools_versions "$search_path" "$plugins_installed" "$tools_installed") + + # install tools from legacy version files + # install order is plugin order which is alphabetical + local legacy_config + legacy_config=$(get_asdf_config_value "legacy_version_file") + if [ "$legacy_config" = "yes" ]; then + tools_installed=$(install_directory_tools_legacy_versions "$search_path" "$plugins_installed" "$tools_installed") + fi + + printf "%s\n" "$tools_installed" +} + +install_directory_tools_tools_versions() { + local search_path=$1 + local plugins_installed=$2 + local tools_installed=$3 + # TODO when should we resolve tool version from the environment ? + local tool_versions file_name=$(asdf_tool_versions_filename) if ! [[ -f "$search_path/$file_name" ]]; then - display_debug "install_directory_tools '$search_path': exiting early... $file_name file not found" + display_debug "install_directory_tools_tools_versions '$search_path': exiting early... $file_name file not found" printf "%s\n" "$tools_installed" return 0 fi tool_versions=$(strip_tool_version_comments "$search_path/$file_name" | awk '{$1=$1};1') if [[ -z $tool_versions ]]; then - display_debug "install_directory_tools '$search_path': exiting early... no tools found in directory" + display_debug "install_directory_tools_tools_versions '$search_path': exiting early... no tools found in directory" printf "%s\n" "$tools_installed" return 0 fi while IFS=' ' read -r tool_version; do - display_debug "install_directory_tools '$search_path': found '$tool_version'" + display_debug "install_directory_tools_tools_versions '$search_path': found '$tool_version'" # read one version from the file IFS=' ' read -ra parts <<< "$tool_version" @@ -197,7 +216,7 @@ install_directory_tools() { # skip if plugin is installed already if [[ -n $(stringlist_contains "$tools_installed" "$plugin_name") ]]; then - display_debug "install_directory_tools '$search_path': '$plugin_name' is already installed... skipping" + display_debug "install_directory_tools_tools_versions '$search_path': '$plugin_name' is already installed... skipping" continue fi @@ -205,58 +224,58 @@ install_directory_tools() { display_none $(install_tool_version "$plugin_name" "$plugin_version") tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') - display_debug "install_directory_tools '$search_path': installed '$plugin_name':'$plugin_version' new state of tools_installed='$tools_installed'" + display_debug "install_directory_tools_tools_versions '$search_path': installed '$plugin_name':'$plugin_version' new state of tools_installed='$tools_installed'" done <<< $tool_versions - # TODO when should we resolve tool version from the environment ? + printf "%s\n" "$tools_installed" +} - # install tools from legacy version files - # install order is plugin order which is alphabetical - local legacy_config - legacy_config=$(get_asdf_config_value "legacy_version_file") - if [ "$legacy_config" = "yes" ]; then - display_debug "install_directory_tools '$search_path': resolving legacy files" - local plugin_name - for plugin_name in $plugins_installed; do - # skip if plugin is installed already - if [[ -n $(stringlist_contains "$tool_versions" "$plugin_name") ]]; then - display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: skipping as tool was already installed" - continue - fi +install_directory_tools_legacy_versions() { + local search_path=$1 + local plugins_installed=$2 + local tools_installed=$3 - # extract plugin legacy information - local plugin_path - plugin_path=$(get_plugin_path "$plugin_name") - local legacy_list_filenames_script - legacy_list_filenames_script="${plugin_path}/bin/list-legacy-filenames" + display_debug "install_directory_tools_legacy_versions '$search_path': resolving legacy files" + local plugin_name + for plugin_name in $plugins_installed; do + # skip if plugin is installed already + if [[ -n $(stringlist_contains "$tool_versions" "$plugin_name") ]]; then + display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: skipping as tool was already installed" + continue + fi - # skip if no legacy_list_filenames_script available - if ! [[ -f "$legacy_list_filenames_script" ]]; then - display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: skipping as legacy files are not supported" - continue - fi + # extract plugin legacy information + local plugin_path + plugin_path=$(get_plugin_path "$plugin_name") + local legacy_list_filenames_script + legacy_list_filenames_script="${plugin_path}/bin/list-legacy-filenames" + + # skip if no legacy_list_filenames_script available + if ! [[ -f "$legacy_list_filenames_script" ]]; then + display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: skipping as legacy files are not supported" + continue + fi - # extract plugin legacy filenames - local legacy_filenames="" - legacy_filenames=$("$legacy_list_filenames_script") + # extract plugin legacy filenames + local legacy_filenames="" + legacy_filenames=$("$legacy_list_filenames_script") - # lookup plugin version in current dir - local plugin_version - plugin_version=$(get_legacy_version_in_dir "$plugin_name" "$search_path" "$legacy_filenames") + # lookup plugin version in current dir + local plugin_version + plugin_version=$(get_legacy_version_in_dir "$plugin_name" "$search_path" "$legacy_filenames") - # skip if version cannot be found - if [ -z "$plugin_version" ]; then - display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: skipping as version cannot be found" - continue - fi + # skip if version cannot be found + if [ -z "$plugin_version" ]; then + display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: skipping as version cannot be found" + continue + fi - display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: plugin_version='$plugin_version'" - display_none $(install_tool_version "$plugin_name" "$plugin_version") + display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: plugin_version='$plugin_version'" + display_none $(install_tool_version "$plugin_name" "$plugin_version") - tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') - display_debug "install_directory_tools '$search_path': legacy_install $plugin_name: installed '$plugin_version' new state of tools_installed='$tools_installed'" - done - fi + tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') + display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: installed '$plugin_version' new state of tools_installed='$tools_installed'" + done printf "%s\n" "$tools_installed" } From 1bd6cad2caae78c8d53a1de705324a0dd1b6998a Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Fri, 1 Mar 2024 09:45:14 +1100 Subject: [PATCH 04/19] fix: put back old behavior of def tools filename --- lib/functions/installs.bash | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 5e30c7dd0..cbdc502c5 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -160,6 +160,16 @@ install_directory_tools_recursive() { search_path=$(dirname "$search_path") done + # still got some tools to install... + # lets see if $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME as actually + # an absolute path + if [ -f "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" ]; then + display_debug "--------------------------------------------------------------------------------------------------------------" + display_debug "attempting to treat \$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME as an absolute path: $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" + tools_installed=$(install_directory_tools_tools_versions "" "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" "$plugins_installed" "$tools_installed") + display_debug "install_directory_tools_recursive '$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME': install_directory_tools returned tools_installed='$tools_installed'" + fi + printf "%s\n" "$tools_installed" } @@ -171,7 +181,8 @@ install_directory_tools() { # install tools from .tool-versions # install order is the order listed in .tool-versions - tools_installed=$(install_directory_tools_tools_versions "$search_path" "$plugins_installed" "$tools_installed") + file_name=$(asdf_tool_versions_filename) + tools_installed=$(install_directory_tools_tools_versions "$search_path" "$file_name" "$plugins_installed" "$tools_installed") # install tools from legacy version files # install order is plugin order which is alphabetical @@ -186,12 +197,12 @@ install_directory_tools() { install_directory_tools_tools_versions() { local search_path=$1 - local plugins_installed=$2 - local tools_installed=$3 + local file_name=$2 + local plugins_installed=$3 + local tools_installed=$4 # TODO when should we resolve tool version from the environment ? local tool_versions - file_name=$(asdf_tool_versions_filename) if ! [[ -f "$search_path/$file_name" ]]; then display_debug "install_directory_tools_tools_versions '$search_path': exiting early... $file_name file not found" printf "%s\n" "$tools_installed" From 669327471f9b18d4a52d5d98f8bf0876fd9aa26d Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Fri, 1 Mar 2024 09:45:39 +1100 Subject: [PATCH 05/19] chore: remove unused vars --- lib/functions/installs.bash | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index cbdc502c5..2c20e848c 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -85,9 +85,6 @@ install_local_tool_versions() { local tool_versions_path tool_versions_path=$(find_tool_versions) - local ordered_install - ordered_install=$1 - # Locate all the plugins installed in the system local plugins_installed if find "$plugins_path" -mindepth 1 -type d &>/dev/null; then From b4d830683cbf7c351b78ef1b11ec1f4db7d400ae Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Wed, 6 Mar 2024 09:47:43 +1100 Subject: [PATCH 06/19] fix: include environment overrides --- lib/functions/installs.bash | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 2c20e848c..976a653d1 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -157,7 +157,7 @@ install_directory_tools_recursive() { search_path=$(dirname "$search_path") done - # still got some tools to install... + # still got some tools to install... # lets see if $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME as actually # an absolute path if [ -f "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" ]; then @@ -179,14 +179,14 @@ install_directory_tools() { # install tools from .tool-versions # install order is the order listed in .tool-versions file_name=$(asdf_tool_versions_filename) - tools_installed=$(install_directory_tools_tools_versions "$search_path" "$file_name" "$plugins_installed" "$tools_installed") + tools_installed=$(install_directory_tools_tools_versions "$search_path" "$file_name" "$plugins_installed" "$tools_installed") # install tools from legacy version files # install order is plugin order which is alphabetical local legacy_config legacy_config=$(get_asdf_config_value "legacy_version_file") if [ "$legacy_config" = "yes" ]; then - tools_installed=$(install_directory_tools_legacy_versions "$search_path" "$plugins_installed" "$tools_installed") + tools_installed=$(install_directory_tools_legacy_versions "$search_path" "$plugins_installed" "$tools_installed") fi printf "%s\n" "$tools_installed" @@ -228,6 +228,15 @@ install_directory_tools_tools_versions() { continue fi + # check if there is an environment override for it + # if so take the environment version + local env_version + env_version=$(get_version_from_env "$plugin_name") + if [ -n "$env_version" ]; then + display_debug "install_directory_tools_tools_versions '$search_path': $plugin_name: using environment override $env_version" + plugin_version=$env_version + fi + # install the version display_none $(install_tool_version "$plugin_name" "$plugin_version") tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') @@ -272,6 +281,15 @@ install_directory_tools_legacy_versions() { local plugin_version plugin_version=$(get_legacy_version_in_dir "$plugin_name" "$search_path" "$legacy_filenames") + # check if there is an environment override for it + # if so take the environment version + local env_version + env_version=$(get_version_from_env "$plugin_name") + if [ -n "$env_version" ]; then + display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: using environment override $env_version" + plugin_version=$env_version + fi + # skip if version cannot be found if [ -z "$plugin_version" ]; then display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: skipping as version cannot be found" @@ -449,4 +467,4 @@ display_debug() { display_none() { printf "" -} \ No newline at end of file +} From 675dc7f092eb5323c83fea6fadaa9510c6ec94cf Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Wed, 6 Mar 2024 09:49:06 +1100 Subject: [PATCH 07/19] chore: shorten install_directory_tools fn names --- lib/functions/installs.bash | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 976a653d1..44be8e317 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -163,7 +163,7 @@ install_directory_tools_recursive() { if [ -f "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" ]; then display_debug "--------------------------------------------------------------------------------------------------------------" display_debug "attempting to treat \$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME as an absolute path: $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" - tools_installed=$(install_directory_tools_tools_versions "" "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" "$plugins_installed" "$tools_installed") + tools_installed=$(_install_directory_tools "" "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" "$plugins_installed" "$tools_installed") display_debug "install_directory_tools_recursive '$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME': install_directory_tools returned tools_installed='$tools_installed'" fi @@ -179,20 +179,20 @@ install_directory_tools() { # install tools from .tool-versions # install order is the order listed in .tool-versions file_name=$(asdf_tool_versions_filename) - tools_installed=$(install_directory_tools_tools_versions "$search_path" "$file_name" "$plugins_installed" "$tools_installed") + tools_installed=$(_install_directory_tools "$search_path" "$file_name" "$plugins_installed" "$tools_installed") # install tools from legacy version files # install order is plugin order which is alphabetical local legacy_config legacy_config=$(get_asdf_config_value "legacy_version_file") if [ "$legacy_config" = "yes" ]; then - tools_installed=$(install_directory_tools_legacy_versions "$search_path" "$plugins_installed" "$tools_installed") + tools_installed=$(_install_directory_tools_legacy "$search_path" "$plugins_installed" "$tools_installed") fi printf "%s\n" "$tools_installed" } -install_directory_tools_tools_versions() { +_install_directory_tools() { local search_path=$1 local file_name=$2 local plugins_installed=$3 @@ -201,19 +201,19 @@ install_directory_tools_tools_versions() { local tool_versions if ! [[ -f "$search_path/$file_name" ]]; then - display_debug "install_directory_tools_tools_versions '$search_path': exiting early... $file_name file not found" + display_debug "_install_directory_tools '$search_path': exiting early... $file_name file not found" printf "%s\n" "$tools_installed" return 0 fi tool_versions=$(strip_tool_version_comments "$search_path/$file_name" | awk '{$1=$1};1') if [[ -z $tool_versions ]]; then - display_debug "install_directory_tools_tools_versions '$search_path': exiting early... no tools found in directory" + display_debug "_install_directory_tools '$search_path': exiting early... no tools found in directory" printf "%s\n" "$tools_installed" return 0 fi while IFS=' ' read -r tool_version; do - display_debug "install_directory_tools_tools_versions '$search_path': found '$tool_version'" + display_debug "_install_directory_tools '$search_path': found '$tool_version'" # read one version from the file IFS=' ' read -ra parts <<< "$tool_version" @@ -224,7 +224,7 @@ install_directory_tools_tools_versions() { # skip if plugin is installed already if [[ -n $(stringlist_contains "$tools_installed" "$plugin_name") ]]; then - display_debug "install_directory_tools_tools_versions '$search_path': '$plugin_name' is already installed... skipping" + display_debug "_install_directory_tools '$search_path': '$plugin_name' is already installed... skipping" continue fi @@ -233,7 +233,7 @@ install_directory_tools_tools_versions() { local env_version env_version=$(get_version_from_env "$plugin_name") if [ -n "$env_version" ]; then - display_debug "install_directory_tools_tools_versions '$search_path': $plugin_name: using environment override $env_version" + display_debug "_install_directory_tools '$search_path': $plugin_name: using environment override $env_version" plugin_version=$env_version fi @@ -241,23 +241,23 @@ install_directory_tools_tools_versions() { display_none $(install_tool_version "$plugin_name" "$plugin_version") tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') - display_debug "install_directory_tools_tools_versions '$search_path': installed '$plugin_name':'$plugin_version' new state of tools_installed='$tools_installed'" + display_debug "_install_directory_tools '$search_path': installed '$plugin_name':'$plugin_version' new state of tools_installed='$tools_installed'" done <<< $tool_versions printf "%s\n" "$tools_installed" } -install_directory_tools_legacy_versions() { +_install_directory_tools_legacy() { local search_path=$1 local plugins_installed=$2 local tools_installed=$3 - display_debug "install_directory_tools_legacy_versions '$search_path': resolving legacy files" + display_debug "_install_directory_tools_legacy '$search_path': resolving legacy files" local plugin_name for plugin_name in $plugins_installed; do # skip if plugin is installed already if [[ -n $(stringlist_contains "$tool_versions" "$plugin_name") ]]; then - display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: skipping as tool was already installed" + display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: skipping as tool was already installed" continue fi @@ -269,7 +269,7 @@ install_directory_tools_legacy_versions() { # skip if no legacy_list_filenames_script available if ! [[ -f "$legacy_list_filenames_script" ]]; then - display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: skipping as legacy files are not supported" + display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: skipping as legacy files are not supported" continue fi @@ -286,21 +286,21 @@ install_directory_tools_legacy_versions() { local env_version env_version=$(get_version_from_env "$plugin_name") if [ -n "$env_version" ]; then - display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: using environment override $env_version" + display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: using environment override $env_version" plugin_version=$env_version fi # skip if version cannot be found if [ -z "$plugin_version" ]; then - display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: skipping as version cannot be found" + display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: skipping as version cannot be found" continue fi - display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: plugin_version='$plugin_version'" + display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: plugin_version='$plugin_version'" display_none $(install_tool_version "$plugin_name" "$plugin_version") tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') - display_debug "install_directory_tools_legacy_versions '$search_path': legacy_install $plugin_name: installed '$plugin_version' new state of tools_installed='$tools_installed'" + display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: installed '$plugin_version' new state of tools_installed='$tools_installed'" done printf "%s\n" "$tools_installed" From cea75a6286240d206b7540e9df314d13154a9e1e Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Wed, 6 Mar 2024 10:16:06 +1100 Subject: [PATCH 08/19] chore: check installed tools has all plugins --- lib/functions/installs.bash | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 44be8e317..50a3c1b82 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -147,8 +147,8 @@ install_directory_tools_recursive() { display_debug "install_directory_tools_recursive '$search_path': install_directory_tools returned tools_installed='$tools_installed'" # terminate if all tools are installed - if [[ -n $(stringlist_same_length "$plugins_installed" "$tools_installed") ]]; then - display_debug "install_directory_tools_recursive '$search_path': exiting as tools_installed has same length as plugins_installed: tools_installed='$tools_installed', plugins_installed='$plugins_installed'" + if [[ -n $(stringlist_a_subset_of_b "$plugins_installed" "$tools_installed") ]]; then + display_debug "install_directory_tools_recursive '$search_path': exiting because all known tools ($plugins_installed) are installed ($tools_installed)" printf "%s\n" "$tools_installed" return 0 fi @@ -436,14 +436,18 @@ get_legacy_version_in_dir() { done } - -stringlist_same_length() { - IFS=' ' read -r -a array1 <<< "$1" - IFS=' ' read -r -a array2 <<< "$2" - if [[ ${#array1[@]} -eq ${#array2[@]} ]]; then - printf "true\n" - return 0 - fi +stringlist_a_subset_of_b() { + local list_a=$1 + local list_b=$2 + local array_a + IFS=' ' read -r -a array_a <<< "$list_a" + for item_a in "${array_a[@]}"; do + if [[ -z $(stringlist_contains "$list_b" "$item_a") ]]; then + return 0 + fi + done + printf "true\n" + return 0 } stringlist_contains() { From f6fd11abd068aa4d6f9fd1c3415c85b7d87d7d20 Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Wed, 6 Mar 2024 10:17:04 +1100 Subject: [PATCH 09/19] chore: remove todo about env var resolution --- lib/functions/installs.bash | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 50a3c1b82..a0831e165 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -197,7 +197,6 @@ _install_directory_tools() { local file_name=$2 local plugins_installed=$3 local tools_installed=$4 - # TODO when should we resolve tool version from the environment ? local tool_versions if ! [[ -f "$search_path/$file_name" ]]; then From 54379a5fd0cb39229dbff5197075b4851e829977 Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Wed, 6 Mar 2024 15:31:06 +1100 Subject: [PATCH 10/19] fix: avoid use of banned commands --- lib/functions/installs.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index a0831e165..87212c521 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -238,7 +238,7 @@ _install_directory_tools() { # install the version display_none $(install_tool_version "$plugin_name" "$plugin_version") - tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') + tools_installed=$(printf "%s %s" "$tools_installed" "$plugin_name" | awk '{$1=$1};1') display_debug "_install_directory_tools '$search_path': installed '$plugin_name':'$plugin_version' new state of tools_installed='$tools_installed'" done <<< $tool_versions @@ -298,7 +298,7 @@ _install_directory_tools_legacy() { display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: plugin_version='$plugin_version'" display_none $(install_tool_version "$plugin_name" "$plugin_version") - tools_installed=$(echo "$tools_installed $plugin_name" | awk '{$1=$1};1') + tools_installed=$(printf "%s %s" "$tools_installed" "$plugin_name" | awk '{$1=$1};1') display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: installed '$plugin_version' new state of tools_installed='$tools_installed'" done From 596a1eabb73a53572958fc4d7abfd95c58cd0b55 Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Wed, 6 Mar 2024 15:31:39 +1100 Subject: [PATCH 11/19] chore: add unit test to verified ordered install --- scripts/lint.bash | 2 ++ test/fixtures/dummy_dependent_plugin/LICENSE | 20 +++++++++++++++++++ .../dummy_dependent_plugin/bin/install | 17 ++++++++++++++++ test/install_command.bats | 10 ++++++++++ test/test_helpers.bash | 10 ++++++++++ 5 files changed, 59 insertions(+) create mode 100644 test/fixtures/dummy_dependent_plugin/LICENSE create mode 100755 test/fixtures/dummy_dependent_plugin/bin/install diff --git a/scripts/lint.bash b/scripts/lint.bash index 6ebfe809c..8632eff1e 100755 --- a/scripts/lint.bash +++ b/scripts/lint.bash @@ -41,6 +41,7 @@ run_shfmt_stylecheck() { test/test_helpers.bash \ test/fixtures/dummy_broken_plugin/bin/* \ test/fixtures/dummy_legacy_plugin/bin/* \ + test/fixtures/dummy_dependent_plugin/bin/* \ test/fixtures/dummy_plugin/bin/* print.info "Checking .bats with shfmt" @@ -65,6 +66,7 @@ run_shellcheck_linter() { test/test_helpers.bash \ test/fixtures/dummy_broken_plugin/bin/* \ test/fixtures/dummy_legacy_plugin/bin/* \ + test/fixtures/dummy_dependent_plugin/bin/* \ test/fixtures/dummy_plugin/bin/* print.info "Checking .bats files with Shellcheck" diff --git a/test/fixtures/dummy_dependent_plugin/LICENSE b/test/fixtures/dummy_dependent_plugin/LICENSE new file mode 100644 index 000000000..d3084751c --- /dev/null +++ b/test/fixtures/dummy_dependent_plugin/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Akash Manohar J + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/test/fixtures/dummy_dependent_plugin/bin/install b/test/fixtures/dummy_dependent_plugin/bin/install new file mode 100755 index 000000000..b5b413d68 --- /dev/null +++ b/test/fixtures/dummy_dependent_plugin/bin/install @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +# recurse 2 directories up to get to the +# installs directory +_ASDF_PATH=$(dirname "$ASDF_INSTALL_PATH") +_ASDF_PATH=$(dirname "$_ASDF_PATH") +DUMMY_EXPECTED_INSTALL="$_ASDF_PATH/dummy/1.2.0/version" + +mkdir -p "$ASDF_INSTALL_PATH" +if ! [[ -f "$DUMMY_EXPECTED_INSTALL" ]]; then + echo "Could not detect dependent plugin dummy. at path $DUMMY_EXPECTED_INSTALL" + exit 1 +fi +echo "Successfully detected depdendent plugin dummy." + +env >"$ASDF_INSTALL_PATH/env" +echo "$ASDF_INSTALL_VERSION" >"$ASDF_INSTALL_PATH/version" diff --git a/test/install_command.bats b/test/install_command.bats index 9e70d544b..67a8251f0 100644 --- a/test/install_command.bats +++ b/test/install_command.bats @@ -7,6 +7,7 @@ setup() { install_dummy_legacy_plugin install_dummy_plugin install_dummy_broken_plugin + install_dummy_dependent_plugin PROJECT_DIR="$HOME/project" mkdir -p "$PROJECT_DIR" @@ -36,6 +37,15 @@ teardown() { [ "$(cat "$ASDF_DIR/installs/dummy/1.2.0/version")" = "1.2.0" ] } +@test "install_command installs plugins in order" { + cd "$PROJECT_DIR" + printf 'dummy 1.2.0\ndummy-dependent 1.3.0' >".tool-versions" + run asdf install + [ "$status" -eq 0 ] + [ "$(cat "$ASDF_DIR/installs/dummy/1.2.0/version")" = "1.2.0" ] + [ "$(cat "$ASDF_DIR/installs/dummy-dependent/1.3.0/version")" = "1.3.0" ] +} + @test "install_command with only name installs the version in .tool-versions" { cd "$PROJECT_DIR" echo -n 'dummy 1.2.0' >".tool-versions" diff --git a/test/test_helpers.bash b/test/test_helpers.bash index 6f4468e1b..ad887eeb9 100644 --- a/test/test_helpers.bash +++ b/test/test_helpers.bash @@ -48,6 +48,12 @@ install_mock_broken_plugin() { cp -r "$BATS_TEST_DIRNAME/fixtures/dummy_broken_plugin" "$location/plugins/$plugin_name" } +install_mock_dependent_plugin() { + local plugin_name=$1 + local location="${2:-$ASDF_DIR}" + cp -r "$BATS_TEST_DIRNAME/fixtures/dummy_dependent_plugin" "$location/plugins/$plugin_name" +} + install_mock_plugin_repo() { local plugin_name=$1 local location="${BASE_DIR}/repo-${plugin_name}" @@ -82,6 +88,10 @@ install_dummy_broken_plugin() { install_mock_broken_plugin "dummy-broken" } +install_dummy_dependent_plugin() { + install_mock_dependent_plugin "dummy-dependent" +} + install_dummy_version() { install_mock_plugin_version "dummy" "$1" } From 0acb23297f4874af4ee3c7538411683fdae6c406 Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Wed, 6 Mar 2024 15:39:09 +1100 Subject: [PATCH 12/19] chore: fix installs.bash linting --- lib/functions/installs.bash | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 87212c521..f6e2cfae2 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -215,7 +215,7 @@ _install_directory_tools() { display_debug "_install_directory_tools '$search_path': found '$tool_version'" # read one version from the file - IFS=' ' read -ra parts <<< "$tool_version" + IFS=' ' read -ra parts <<<"$tool_version" local plugin_name plugin_name=${parts[0]} local plugin_version @@ -241,7 +241,7 @@ _install_directory_tools() { tools_installed=$(printf "%s %s" "$tools_installed" "$plugin_name" | awk '{$1=$1};1') display_debug "_install_directory_tools '$search_path': installed '$plugin_name':'$plugin_version' new state of tools_installed='$tools_installed'" - done <<< $tool_versions + done <<<$tool_versions printf "%s\n" "$tools_installed" } @@ -439,7 +439,7 @@ stringlist_a_subset_of_b() { local list_a=$1 local list_b=$2 local array_a - IFS=' ' read -r -a array_a <<< "$list_a" + IFS=' ' read -r -a array_a <<<"$list_a" for item_a in "${array_a[@]}"; do if [[ -z $(stringlist_contains "$list_b" "$item_a") ]]; then return 0 @@ -453,7 +453,7 @@ stringlist_contains() { local list=$1 local search=$2 local array - IFS=' ' read -r -a array <<< "$list" + IFS=' ' read -r -a array <<<"$list" for item in "${array[@]}"; do if [ $item = $search ]; then printf "true\n" From 1e2d6989ff5a06d81e5338b8203ef05790f9479c Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Fri, 8 Mar 2024 09:52:24 +1100 Subject: [PATCH 13/19] fix: install multiple versions of same plugin in tool versions --- lib/functions/installs.bash | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index f6e2cfae2..0233a9ef6 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -218,8 +218,6 @@ _install_directory_tools() { IFS=' ' read -ra parts <<<"$tool_version" local plugin_name plugin_name=${parts[0]} - local plugin_version - plugin_version=${parts[1]} # skip if plugin is installed already if [[ -n $(stringlist_contains "$tools_installed" "$plugin_name") ]]; then @@ -227,18 +225,26 @@ _install_directory_tools() { continue fi + # install the versions + local plugin_version + for plugin_version in "${parts[@]:1}"; do + # install the version + display_none $(install_tool_version "$plugin_name" "$plugin_version") + tools_installed=$(printf "%s %s" "$tools_installed" "$plugin_name" | awk '{$1=$1};1') + done + # check if there is an environment override for it - # if so take the environment version + # if so also install the environment version local env_version env_version=$(get_version_from_env "$plugin_name") if [ -n "$env_version" ]; then display_debug "_install_directory_tools '$search_path': $plugin_name: using environment override $env_version" plugin_version=$env_version - fi - # install the version - display_none $(install_tool_version "$plugin_name" "$plugin_version") - tools_installed=$(printf "%s %s" "$tools_installed" "$plugin_name" | awk '{$1=$1};1') + # install the version + display_none $(install_tool_version "$plugin_name" "$plugin_version") + tools_installed=$(printf "%s %s" "$tools_installed" "$plugin_name" | awk '{$1=$1};1') + fi display_debug "_install_directory_tools '$search_path': installed '$plugin_name':'$plugin_version' new state of tools_installed='$tools_installed'" done <<<$tool_versions From f1a268e922641fd02118da92f51cdbcf22a925b8 Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Fri, 8 Mar 2024 09:52:50 +1100 Subject: [PATCH 14/19] chore: remove unused some_tools_installed --- lib/functions/installs.bash | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 0233a9ef6..68f035eaa 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -79,7 +79,6 @@ install_local_tool_versions() { local search_path search_path=$PWD - local some_tools_installed local some_plugin_not_installed local tool_versions_path From c684c1a8c0725065078c94dd685d4a223168dc97 Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Mon, 18 Mar 2024 13:23:46 +1100 Subject: [PATCH 15/19] fix: stringlist_contains use correct var name --- lib/functions/installs.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 68f035eaa..e915dc8ce 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -260,7 +260,7 @@ _install_directory_tools_legacy() { local plugin_name for plugin_name in $plugins_installed; do # skip if plugin is installed already - if [[ -n $(stringlist_contains "$tool_versions" "$plugin_name") ]]; then + if [[ -n $(stringlist_contains "$tools_installed" "$plugin_name") ]]; then display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: skipping as tool was already installed" continue fi From 3d97f31f35a13953108faa1688f782a700bf4d92 Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Mon, 18 Mar 2024 13:28:50 +1100 Subject: [PATCH 16/19] chore: create display_debug_hr for easy hr output --- lib/functions/installs.bash | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index e915dc8ce..4f3074fda 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -141,7 +141,7 @@ install_directory_tools_recursive() { while [ "$search_path" != "/" ]; do # install tools from files in current directory - display_debug "--------------------------------------------------------------------------------------------------------------" + display_debug_hr tools_installed=$(install_directory_tools "$search_path" "$plugins_installed" "$tools_installed") display_debug "install_directory_tools_recursive '$search_path': install_directory_tools returned tools_installed='$tools_installed'" @@ -160,7 +160,7 @@ install_directory_tools_recursive() { # lets see if $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME as actually # an absolute path if [ -f "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" ]; then - display_debug "--------------------------------------------------------------------------------------------------------------" + display_debug_hr display_debug "attempting to treat \$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME as an absolute path: $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" tools_installed=$(_install_directory_tools "" "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" "$plugins_installed" "$tools_installed") display_debug "install_directory_tools_recursive '$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME': install_directory_tools returned tools_installed='$tools_installed'" @@ -467,6 +467,10 @@ stringlist_contains() { done } +display_debug_hr() { + display_debug "--------------------------------------------------------------------------------------------------------------" +} + display_debug() { if [[ $DEBUG = "true" ]]; then printf "debug: %s\n" "$1" >&2 From 53998e24e60e530a2e73bc76686a5d6861dfd00d Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Mon, 18 Mar 2024 13:30:54 +1100 Subject: [PATCH 17/19] chore: move display_ functions to utils.sh --- lib/functions/installs.bash | 14 -------------- lib/utils.bash | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 4f3074fda..978955dc8 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -466,17 +466,3 @@ stringlist_contains() { fi done } - -display_debug_hr() { - display_debug "--------------------------------------------------------------------------------------------------------------" -} - -display_debug() { - if [[ $DEBUG = "true" ]]; then - printf "debug: %s\n" "$1" >&2 - fi -} - -display_none() { - printf "" -} diff --git a/lib/utils.bash b/lib/utils.bash index 21978a929..ae7d40f2b 100644 --- a/lib/utils.bash +++ b/lib/utils.bash @@ -156,6 +156,20 @@ display_error() { printf "%s\n" "$1" >&2 } +display_debug_hr() { + display_debug "--------------------------------------------------------------------------------------------------------------" +} + +display_debug() { + if [[ $DEBUG = "true" ]]; then + printf "debug: %s\n" "$1" >&2 + fi +} + +display_none() { + printf "" +} + get_version_in_dir() { local plugin_name=$1 local search_path=$2 From 257fff639e17966fed3ba733ab3573193413814c Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Mon, 18 Mar 2024 13:33:13 +1100 Subject: [PATCH 18/19] fix: avoid treating ASDF_DEFAULT_TOOL_VERSIONS_FILENAME as an absolute path --- lib/functions/installs.bash | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 978955dc8..9215f622e 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -156,16 +156,6 @@ install_directory_tools_recursive() { search_path=$(dirname "$search_path") done - # still got some tools to install... - # lets see if $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME as actually - # an absolute path - if [ -f "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" ]; then - display_debug_hr - display_debug "attempting to treat \$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME as an absolute path: $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" - tools_installed=$(_install_directory_tools "" "$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME" "$plugins_installed" "$tools_installed") - display_debug "install_directory_tools_recursive '$ASDF_DEFAULT_TOOL_VERSIONS_FILENAME': install_directory_tools returned tools_installed='$tools_installed'" - fi - printf "%s\n" "$tools_installed" } From 8d0fc4fdaa16af7582a677afca90874552bea11e Mon Sep 17 00:00:00 2001 From: Christopher Palmer Date: Mon, 18 Mar 2024 13:53:37 +1100 Subject: [PATCH 19/19] chore: fix linting issues --- lib/functions/installs.bash | 10 +++++----- lib/utils.bash | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/functions/installs.bash b/lib/functions/installs.bash index 9215f622e..d24afcdc2 100644 --- a/lib/functions/installs.bash +++ b/lib/functions/installs.bash @@ -218,7 +218,7 @@ _install_directory_tools() { local plugin_version for plugin_version in "${parts[@]:1}"; do # install the version - display_none $(install_tool_version "$plugin_name" "$plugin_version") + display_none "$(install_tool_version "$plugin_name" "$plugin_version")" tools_installed=$(printf "%s %s" "$tools_installed" "$plugin_name" | awk '{$1=$1};1') done @@ -231,12 +231,12 @@ _install_directory_tools() { plugin_version=$env_version # install the version - display_none $(install_tool_version "$plugin_name" "$plugin_version") + display_none "$(install_tool_version "$plugin_name" "$plugin_version")" tools_installed=$(printf "%s %s" "$tools_installed" "$plugin_name" | awk '{$1=$1};1') fi display_debug "_install_directory_tools '$search_path': installed '$plugin_name':'$plugin_version' new state of tools_installed='$tools_installed'" - done <<<$tool_versions + done <<<"$tool_versions" printf "%s\n" "$tools_installed" } @@ -291,7 +291,7 @@ _install_directory_tools_legacy() { fi display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: plugin_version='$plugin_version'" - display_none $(install_tool_version "$plugin_name" "$plugin_version") + display_none "$(install_tool_version "$plugin_name" "$plugin_version")" tools_installed=$(printf "%s %s" "$tools_installed" "$plugin_name" | awk '{$1=$1};1') display_debug "_install_directory_tools_legacy '$search_path': legacy_install $plugin_name: installed '$plugin_version' new state of tools_installed='$tools_installed'" @@ -450,7 +450,7 @@ stringlist_contains() { local array IFS=' ' read -r -a array <<<"$list" for item in "${array[@]}"; do - if [ $item = $search ]; then + if [ "$item" = "$search" ]; then printf "true\n" return 0 fi diff --git a/lib/utils.bash b/lib/utils.bash index ae7d40f2b..ae3dc6e5f 100644 --- a/lib/utils.bash +++ b/lib/utils.bash @@ -157,7 +157,7 @@ display_error() { } display_debug_hr() { - display_debug "--------------------------------------------------------------------------------------------------------------" + display_debug "--------------------------------------------------------------------------------------------------------------" } display_debug() {