@@ -29,6 +29,7 @@ func AllVersions(conf config.Config, plugins []plugins.Plugin, directory string)
2929 resolvedToolVersions := map [string ]bool {}
3030 var finalVersions []ToolVersions
3131
32+ // First: Resolve using environment values
3233 for _ , plugin := range plugins {
3334 version , envVariableName , found := findVersionsInEnv (plugin .Name )
3435 if found {
@@ -37,7 +38,22 @@ func AllVersions(conf config.Config, plugins []plugins.Plugin, directory string)
3738 }
3839 }
3940
41+ // Iterate from the nearest to furthest directory, ending with the user's home.
4042 for iterDir := range iterDirectories (conf , directory ) {
43+ // Second: Resolve using the tool versions file
44+ filepath := path .Join (iterDir , conf .DefaultToolVersionsFilename )
45+ if _ , err = os .Stat (filepath ); err == nil {
46+ if allVersions , err := toolversions .GetAllToolsAndVersions (filepath ); err == nil {
47+ for _ , version := range allVersions {
48+ if _ , isPluginResolved := resolvedToolVersions [version .Name ]; ! isPluginResolved {
49+ resolvedToolVersions [version .Name ] = true
50+ finalVersions = append (finalVersions , ToolVersions {Name : version .Name , Versions : version .Versions , Source : conf .DefaultToolVersionsFilename , Directory : iterDir })
51+ }
52+ }
53+ }
54+ }
55+
56+ // Third: Resolve using legacy settings
4157 for _ , plugin := range plugins {
4258 if _ , isPluginResolved := resolvedToolVersions [plugin .Name ]; ! isPluginResolved {
4359 version , found , err := findLegacyVersionsInDir (conf , plugin , iterDir )
@@ -50,18 +66,6 @@ func AllVersions(conf config.Config, plugins []plugins.Plugin, directory string)
5066 }
5167 }
5268 }
53-
54- filepath := path .Join (iterDir , conf .DefaultToolVersionsFilename )
55- if _ , err = os .Stat (filepath ); err == nil {
56- if allVersions , err := toolversions .GetAllToolsAndVersions (filepath ); err == nil {
57- for _ , v := range allVersions {
58- if _ , isPluginResolved := resolvedToolVersions [v .Name ]; ! isPluginResolved {
59- resolvedToolVersions [v .Name ] = true
60- finalVersions = append (finalVersions , ToolVersions {Name : v .Name , Versions : v .Versions , Source : conf .DefaultToolVersionsFilename , Directory : iterDir })
61- }
62- }
63- }
64- }
6569 }
6670 return finalVersions , nil
6771}
@@ -117,21 +121,15 @@ func iterDirectories(conf config.Config, directory string) iter.Seq[string] {
117121}
118122
119123func findVersionsInDir (conf config.Config , plugin plugins.Plugin , directory string ) (versions ToolVersions , found bool , err error ) {
120- versions , found , err = findLegacyVersionsInDir (conf , plugin , directory )
121- if found || err != nil {
122- return versions , found , err
123- }
124-
125124 filepath := path .Join (directory , conf .DefaultToolVersionsFilename )
126-
127125 if _ , err = os .Stat (filepath ); err == nil {
128126 versions , found , err := toolversions .FindToolVersions (filepath , plugin .Name )
129127 if found || err != nil {
130128 return ToolVersions {Name : plugin .Name , Versions : versions , Source : conf .DefaultToolVersionsFilename , Directory : directory }, found , err
131129 }
132130 }
133131
134- return versions , found , nil
132+ return findLegacyVersionsInDir ( conf , plugin , directory )
135133}
136134
137135func findLegacyVersionsInDir (conf config.Config , plugin plugins.Plugin , directory string ) (versions ToolVersions , found bool , err error ) {
0 commit comments