@@ -299,8 +299,8 @@ func getVersionInfo(conf config.Config, plugin plugins.Plugin, currentDir string
299299 installed := false
300300 if found {
301301 firstVersion := toolversion .Versions [0 ]
302- versionType , version := toolversions .Parse (firstVersion )
303- installed = installs .IsInstalled (conf , plugin , versionType , version )
302+ version := toolversions .Parse (firstVersion )
303+ installed = installs .IsInstalled (conf , plugin , version )
304304 }
305305 return toolversion , found , installed
306306}
@@ -354,13 +354,41 @@ func execCommand(logger *log.Logger, command string, args []string) error {
354354 }
355355
356356 executable , found , err := shims .FindExecutable (conf , command , currentDir )
357+
357358 if err != nil {
358- logger .Printf ("executable not found due to reason: %s" , err .Error ())
359+
360+ shimPath := shims .Path (conf , command )
361+ toolVersions , _ := shims .GetToolsAndVersionsFromShimFile (shimPath )
362+
363+ if len (toolVersions ) > 0 {
364+ if anyInstalled (conf , toolVersions ) {
365+ logger .Printf ("No version is set for command %s" , command )
366+ logger .Printf ("Consider adding one of the following versions in your config file at %s/.tool-versions\n " , currentDir )
367+ } else {
368+ logger .Printf ("No preset version installed for command %s" , command )
369+ for _ , toolVersion := range toolVersions {
370+ for _ , version := range toolVersion .Versions {
371+ fmt .Printf ("asdf install %s %s\n " , toolVersion .Name , version )
372+ }
373+ }
374+
375+ fmt .Printf ("or add one of the following versions in your config file at %s/.tool-versions\n " , currentDir )
376+ }
377+
378+ for _ , toolVersion := range toolVersions {
379+ for _ , version := range toolVersion .Versions {
380+ fmt .Printf ("%s %s" , toolVersion .Name , version )
381+ }
382+ }
383+ }
384+
385+ os .Exit (126 )
359386 return err
360387 }
361388
362389 if ! found {
363390 logger .Print ("executable not found" )
391+ os .Exit (126 )
364392 return fmt .Errorf ("executable not found" )
365393 }
366394 if len (args ) > 1 {
@@ -372,6 +400,19 @@ func execCommand(logger *log.Logger, command string, args []string) error {
372400 return exec .Exec (executable , args , os .Environ ())
373401}
374402
403+ func anyInstalled (conf config.Config , toolVersions []toolversions.ToolVersions ) bool {
404+ for _ , toolVersion := range toolVersions {
405+ for _ , version := range toolVersion .Versions {
406+ version := toolversions .Parse (version )
407+ plugin := plugins .New (conf , toolVersion .Name )
408+ if installs .IsInstalled (conf , plugin , version ) {
409+ return true
410+ }
411+ }
412+ }
413+ return false
414+ }
415+
375416func pluginAddCommand (_ * cli.Context , conf config.Config , logger * log.Logger , pluginName , pluginRepo string ) error {
376417 if pluginName == "" {
377418 // Invalid arguments
@@ -577,10 +618,10 @@ func installCommand(logger *log.Logger, toolName, version string) error {
577618 return err
578619 }
579620 } else {
580- parsedVersion , query := toolversions .ParseFromCliArg (version )
621+ parsedVersion := toolversions .ParseFromCliArg (version )
581622
582- if parsedVersion == "latest" {
583- err = versions .InstallVersion (conf , plugin , version , query , os .Stdout , os .Stderr )
623+ if parsedVersion . Type == "latest" {
624+ err = versions .InstallVersion (conf , plugin , version , parsedVersion . Value , os .Stdout , os .Stderr )
584625 } else {
585626 err = versions .InstallOneVersion (conf , plugin , version , os .Stdout , os .Stderr )
586627 }
@@ -890,7 +931,7 @@ func uninstallCommand(logger *log.Logger, tool, version string) error {
890931 return shims .GenerateAll (conf , os .Stdout , os .Stderr )
891932}
892933
893- func whereCommand (logger * log.Logger , tool , version string ) error {
934+ func whereCommand (logger * log.Logger , tool , versionStr string ) error {
894935 conf , err := config .LoadConfig ()
895936 if err != nil {
896937 logger .Printf ("error loading config: %s" , err )
@@ -912,20 +953,28 @@ func whereCommand(logger *log.Logger, tool, version string) error {
912953 return err
913954 }
914955
915- versionType , parsedVersion := toolversions .Parse (version )
956+ version := toolversions .Parse (versionStr )
916957
917- if version == "" {
958+ if version .Type == "system" {
959+ logger .Printf ("System version is selected" )
960+ return errors .New ("System version is selected" )
961+ }
962+
963+ if version .Value == "" {
918964 // resolve version
919- toolversions , found , err := resolve .Version (conf , plugin , currentDir )
965+ versions , found , err := resolve .Version (conf , plugin , currentDir )
920966 if err != nil {
921967 fmt .Printf ("err %#+v\n " , err )
922968 return err
923969 }
924970
925- if found && len (toolversions .Versions ) > 0 && installs .IsInstalled (conf , plugin , "version" , toolversions .Versions [0 ]) {
926- installPath := installs .InstallPath (conf , plugin , "version" , toolversions .Versions [0 ])
927- logger .Printf ("%s" , installPath )
928- return nil
971+ if found && len (versions .Versions ) > 0 {
972+ versionStruct := toolversions.Version {Type : "version" , Value : versions .Versions [0 ]}
973+ if installs .IsInstalled (conf , plugin , versionStruct ) {
974+ installPath := installs .InstallPath (conf , plugin , versionStruct )
975+ logger .Printf ("%s" , installPath )
976+ return nil
977+ }
929978 }
930979
931980 // not found
@@ -934,25 +983,20 @@ func whereCommand(logger *log.Logger, tool, version string) error {
934983 return errors .New (msg )
935984 }
936985
937- if version == "system" {
938- logger .Printf ("System version is selected" )
939- return errors .New ("System version is selected" )
940- }
941-
942- if ! installs .IsInstalled (conf , plugin , versionType , parsedVersion ) {
986+ if ! installs .IsInstalled (conf , plugin , version ) {
943987 logger .Printf ("Version not installed" )
944988 return errors .New ("Version not installed" )
945989 }
946990
947- installPath := installs .InstallPath (conf , plugin , versionType , parsedVersion )
991+ installPath := installs .InstallPath (conf , plugin , version )
948992 logger .Printf ("%s" , installPath )
949993
950994 return nil
951995}
952996
953- func reshimToolVersion (conf config.Config , tool , version string , out io.Writer , errOut io.Writer ) error {
954- versionType , version := toolversions .Parse (version )
955- return shims .GenerateForVersion (conf , plugins .New (conf , tool ), versionType , version , out , errOut )
997+ func reshimToolVersion (conf config.Config , tool , versionStr string , out io.Writer , errOut io.Writer ) error {
998+ version := toolversions .Parse (versionStr )
999+ return shims .GenerateForVersion (conf , plugins .New (conf , tool ), version . Type , version . Value , out , errOut )
9561000}
9571001
9581002func latestForPlugin (conf config.Config , toolName , pattern string , showStatus bool ) error {
@@ -971,7 +1015,7 @@ func latestForPlugin(conf config.Config, toolName, pattern string, showStatus bo
9711015 }
9721016
9731017 if showStatus {
974- installed := installs .IsInstalled (conf , plugin , "version" , latest )
1018+ installed := installs .IsInstalled (conf , plugin , toolversions. Version { Type : "version" , Value : latest } )
9751019 fmt .Printf ("%s\t %s\t %s\n " , plugin .Name , latest , installedStatus (installed ))
9761020 } else {
9771021 fmt .Printf ("%s\n " , latest )
0 commit comments