mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-12-23 20:05:09 -07:00
fix(golang-rewrite): allow directories returned by list-bin-paths to be absent from the file system
* create `repotest.WritePluginCallback` function * add test for `list-bin-paths` callback that returns non-existent path * if directory name returned by `list-bin-paths` doesn't exist skip it
This commit is contained in:
parent
20a7f851a0
commit
80ac9bb51c
@ -308,9 +308,10 @@ func ToolExecutables(conf config.Config, plugin plugins.Plugin, versionType, ver
|
|||||||
|
|
||||||
for _, path := range paths {
|
for _, path := range paths {
|
||||||
entries, err := os.ReadDir(path)
|
entries, err := os.ReadDir(path)
|
||||||
if err != nil {
|
if _, ok := err.(*os.PathError); err != nil && !ok {
|
||||||
return executables, err
|
return executables, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
// If entry is dir or cannot be executed by the current user ignore it
|
// If entry is dir or cannot be executed by the current user ignore it
|
||||||
filePath := filepath.Join(path, entry.Name())
|
filePath := filepath.Join(path, entry.Name())
|
||||||
@ -320,9 +321,6 @@ func ToolExecutables(conf config.Config, plugin plugins.Plugin, versionType, ver
|
|||||||
|
|
||||||
executables = append(executables, filePath)
|
executables = append(executables, filePath)
|
||||||
}
|
}
|
||||||
if err != nil {
|
|
||||||
return executables, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return executables, err
|
return executables, err
|
||||||
}
|
}
|
||||||
|
@ -318,6 +318,22 @@ func TestToolExecutables(t *testing.T) {
|
|||||||
|
|
||||||
assert.Equal(t, filenames, []string{"dummy"})
|
assert.Equal(t, filenames, []string{"dummy"})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("returns list of executables even when one directory printed by list-bin-paths doesn't exist", func(t *testing.T) {
|
||||||
|
// foo is first in list returned by list-bin-paths but doesn't exist, do
|
||||||
|
// we still get the executables in the bin/ dir?
|
||||||
|
repotest.WritePluginCallback(plugin.Dir, "list-bin-paths", "#!/usr/bin/env bash\necho 'foo bin'")
|
||||||
|
executables, err := ToolExecutables(conf, plugin, "version", version.Value)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
var filenames []string
|
||||||
|
for _, executablePath := range executables {
|
||||||
|
assert.True(t, strings.HasPrefix(executablePath, conf.DataDir))
|
||||||
|
filenames = append(filenames, filepath.Base(executablePath))
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, filenames, []string{"dummy"})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestExecutableDirs(t *testing.T) {
|
func TestExecutableDirs(t *testing.T) {
|
||||||
|
@ -31,6 +31,11 @@ func Setup(asdfDataDir string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WritePluginCallback is for creating new plugin callbacks on the fly.
|
||||||
|
func WritePluginCallback(pluginDir, callbackName, script string) error {
|
||||||
|
return os.WriteFile(filepath.Join(pluginDir, "bin", callbackName), []byte(script), 0o777)
|
||||||
|
}
|
||||||
|
|
||||||
// InstallPlugin copies in the specified plugin fixture into the asdfDataDir's
|
// InstallPlugin copies in the specified plugin fixture into the asdfDataDir's
|
||||||
// plugin directory and initializes a Git repo for it so asdf treats it as
|
// plugin directory and initializes a Git repo for it so asdf treats it as
|
||||||
// installed.
|
// installed.
|
||||||
|
Loading…
Reference in New Issue
Block a user