@@ -8,6 +8,13 @@ import (
88 "github.com/spf13/cobra"
99)
1010
11+ // runtimeStatus holds the status of a configured runtime
12+ type runtimeStatus struct {
13+ provider runtime.Provider
14+ version string
15+ installed bool
16+ }
17+
1118var currentCmd = & cobra.Command {
1219 Use : "current [runtime]" ,
1320 Short : "Show the currently active version(s)" ,
@@ -21,43 +28,102 @@ Examples:
2128 Args : cobra .MaximumNArgs (1 ),
2229 Run : func (cmd * cobra.Command , args []string ) {
2330 if len (args ) == 0 {
24- // Show all active versions
25- ui .Header ("Currently active versions:" )
26- providers := runtime .GetAll ()
31+ showAllVersions ()
32+ } else {
33+ showSingleVersion (args [0 ])
34+ }
35+ },
36+ }
2737
28- if len (providers ) == 0 {
29- ui .Info ("No runtime providers registered" )
30- return
31- }
38+ // showAllVersions displays all configured runtimes and prompts to install missing ones
39+ func showAllVersions () {
40+ providers := runtime .GetAll ()
41+
42+ if len (providers ) == 0 {
43+ ui .Info ("No runtime providers registered" )
44+ return
45+ }
46+
47+ // Collect status for all configured runtimes
48+ var configured []runtimeStatus
49+ for _ , provider := range providers {
50+ version , err := provider .CurrentVersion ()
51+ if err != nil {
52+ // Not configured - skip it
53+ continue
54+ }
55+ installed , _ := provider .IsInstalled (version )
56+ configured = append (configured , runtimeStatus {
57+ provider : provider ,
58+ version : version ,
59+ installed : installed ,
60+ })
61+ }
62+
63+ if len (configured ) == 0 {
64+ ui .Info ("No runtimes configured" )
65+ return
66+ }
3267
33- for _ , provider := range providers {
34- version , err := provider .CurrentVersion ()
35- if err != nil {
36- fmt .Printf (" %s: %v\n " , provider .DisplayName (), err )
68+ // Display all configured versions
69+ ui .Header ("Currently active versions:" )
70+ var missing []runtimeStatus
71+ for _ , rs := range configured {
72+ if rs .installed {
73+ fmt .Printf (" %s: %s\n " , ui .Highlight (rs .provider .DisplayName ()), ui .HighlightVersion (rs .version ))
74+ } else {
75+ ui .Warning ("%s: %s (not installed)" , rs .provider .DisplayName (), rs .version )
76+ missing = append (missing , rs )
77+ }
78+ }
79+
80+ // Prompt to install missing versions
81+ if len (missing ) > 0 {
82+ fmt .Println ()
83+ if ui .PromptInstallMissing (missing ) {
84+ for _ , rs := range missing {
85+ ui .Info ("Installing %s %s..." , rs .provider .DisplayName (), rs .version )
86+ if err := rs .provider .Install (rs .version ); err != nil {
87+ ui .Error ("Failed to install %s %s: %v" , rs .provider .DisplayName (), rs .version , err )
3788 } else {
38- fmt . Printf ( " %s: %s\n " , ui . Highlight ( provider .DisplayName ()), ui . HighlightVersion ( version ) )
89+ ui . Success ( "%s %s installed successfully " , rs . provider .DisplayName (), rs . version )
3990 }
4091 }
41- } else {
42- // Show specific runtime version
43- runtimeName := args [0 ]
44-
45- provider , err := runtime .Get (runtimeName )
46- if err != nil {
47- ui .Error ("%v" , err )
48- ui .Info ("Available runtimes: %v" , runtime .List ())
49- return
50- }
92+ }
93+ }
94+ }
5195
52- version , err := provider .CurrentVersion ()
53- if err != nil {
54- ui .Error ("%v" , err )
55- return
56- }
96+ // showSingleVersion displays a single runtime version and prompts to install if missing
97+ func showSingleVersion (runtimeName string ) {
98+ provider , err := runtime .Get (runtimeName )
99+ if err != nil {
100+ ui .Error ("%v" , err )
101+ ui .Info ("Available runtimes: %v" , runtime .List ())
102+ return
103+ }
104+
105+ version , err := provider .CurrentVersion ()
106+ if err != nil {
107+ ui .Error ("%v" , err )
108+ return
109+ }
57110
58- fmt .Printf ("%s: %s\n " , ui .Highlight (provider .DisplayName ()), ui .HighlightVersion (version ))
111+ installed , _ := provider .IsInstalled (version )
112+ if installed {
113+ fmt .Printf ("%s: %s\n " , ui .Highlight (provider .DisplayName ()), ui .HighlightVersion (version ))
114+ return
115+ }
116+
117+ // Not installed - show with warning and prompt
118+ ui .Warning ("%s: %s (not installed)" , provider .DisplayName (), version )
119+ fmt .Println ()
120+ if ui .PromptInstall (provider .DisplayName (), version ) {
121+ if err := provider .Install (version ); err != nil {
122+ ui .Error ("Failed to install %s %s: %v" , provider .DisplayName (), version , err )
123+ return
59124 }
60- },
125+ ui .Success ("%s %s installed successfully" , provider .DisplayName (), version )
126+ }
61127}
62128
63129func init () {
0 commit comments