Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions internal/shims/shims.go
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@ func ToolExecutables(conf config.Config, plugin plugins.Plugin, version toolvers
// ExecutablePaths returns a slice of absolute directory paths that tool
// executables are contained in.
func ExecutablePaths(conf config.Config, plugin plugins.Plugin, version toolversions.Version) (paths []string, err error) {
dirs, err := ExecutableDirs(plugin)
dirs, err := ExecutableDirs(conf, plugin, version)
if err != nil {
return []string{}, err
}
Expand All @@ -389,11 +389,17 @@ func ExecutablePaths(conf config.Config, plugin plugins.Plugin, version toolvers

// ExecutableDirs returns a slice of relative directory names that tool executables are
// contained in, *inside installs*
func ExecutableDirs(plugin plugins.Plugin) ([]string, error) {
func ExecutableDirs(conf config.Config, plugin plugins.Plugin, version toolversions.Version) ([]string, error) {
var stdOut strings.Builder
var stdErr strings.Builder

err := plugin.RunCallback("list-bin-paths", []string{}, map[string]string{}, &stdOut, &stdErr)
env := map[string]string{
"ASDF_INSTALL_TYPE": version.Type,
"ASDF_INSTALL_VERSION": version.Value,
"ASDF_INSTALL_PATH": installs.InstallPath(conf, plugin, version),
}

err := plugin.RunCallback("list-bin-paths", []string{}, env, &stdOut, &stdErr)
if err != nil {
if _, ok := err.(plugins.NoCallbackError); ok {
// assume all executables are located in /bin directory
Expand Down
16 changes: 14 additions & 2 deletions internal/shims/shims_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -490,9 +490,10 @@ func TestExecutablePaths(t *testing.T) {
func TestExecutableDirs(t *testing.T) {
conf, plugin := generateConfig(t)
installVersion(t, conf, plugin, "1.2.3")
versionStruct := toolversions.Version{Type: "version", Value: "1.2.3"}

t.Run("returns list only containing 'bin' when list-bin-paths callback missing", func(t *testing.T) {
executables, err := ExecutableDirs(plugin)
executables, err := ExecutableDirs(conf, plugin, versionStruct)
assert.Nil(t, err)
assert.Equal(t, executables, []string{"bin"})
})
Expand All @@ -502,10 +503,21 @@ func TestExecutableDirs(t *testing.T) {
err := os.WriteFile(filepath.Join(plugin.Dir, "bin", "list-bin-paths"), data, 0o777)
assert.Nil(t, err)

executables, err := ExecutableDirs(plugin)
executables, err := ExecutableDirs(conf, plugin, versionStruct)
assert.Nil(t, err)
assert.Equal(t, executables, []string{"foo", "bar"})
})

t.Run("returns environment variables that begin with ASDF_INSTALL", func(t *testing.T) {
data := []byte("echo ${ASDF_INSTALL_TYPE} ${ASDF_INSTALL_VERSION} ${ASDF_INSTALL_PATH}")
err := os.WriteFile(filepath.Join(plugin.Dir, "bin", "list-bin-paths"), data, 0o777)
assert.Nil(t, err)

executables, err := ExecutableDirs(conf, plugin, versionStruct)
assert.Nil(t, err)
assert.Equal(t, []string{"version", "1.2.3"}, executables[0:2])
assert.Contains(t, executables[2], "lua/1.2.3")
})
}

// Helper functions
Expand Down