@@ -19,12 +19,14 @@ package commands
19
19
import (
20
20
"errors"
21
21
"fmt"
22
+ "os"
23
+ "strings"
24
+
22
25
"github.com/pterm/pterm"
23
26
"github.com/urfave/cli/v2"
24
27
"github.com/version-fox/vfox/internal"
25
28
"github.com/version-fox/vfox/internal/toolset"
26
- "os"
27
- "strings"
29
+ "github.com/version-fox/vfox/internal/util"
28
30
)
29
31
30
32
var Install = & cli.Command {
@@ -47,32 +49,67 @@ func installCmd(ctx *cli.Context) error {
47
49
return installAll ()
48
50
}
49
51
50
- sdkArg := ctx .Args (). First ()
51
- if sdkArg == "" {
52
+ args := ctx .Args ()
53
+ if args . First () == "" {
52
54
return cli .Exit ("sdk name is required" , 1 )
53
55
}
54
- argArr := strings .Split (sdkArg , "@" )
55
- argsLen := len (argArr )
56
+
56
57
manager := internal .NewSdkManager ()
57
58
defer manager .Close ()
58
- if argsLen > 2 {
59
- return cli .Exit ("sdk version is invalid" , 1 )
60
- } else {
61
- var name string
62
- var version internal.Version
63
- if argsLen == 2 {
64
- name = strings .ToLower (argArr [0 ])
65
- version = internal .Version (argArr [1 ])
59
+
60
+ errorStore := util .NewErrorStore ()
61
+
62
+ for i := 0 ; i < args .Len (); i ++ {
63
+ sdkArg := args .Get (i )
64
+ argArr := strings .Split (sdkArg , "@" )
65
+ argsLen := len (argArr )
66
+
67
+ if argsLen > 2 {
68
+ errorStore .AddAndShow (sdkArg , fmt .Errorf ("your input is invalid: %s" , sdkArg ))
66
69
} else {
67
- name = strings .ToLower (argArr [0 ])
68
- version = ""
69
- }
70
- source , err := manager .LookupSdkWithInstall (name )
71
- if err != nil {
72
- return err
70
+ var name string
71
+ var version internal.Version
72
+ if argsLen == 2 {
73
+ name = strings .ToLower (argArr [0 ])
74
+ version = internal .Version (argArr [1 ])
75
+ } else {
76
+ name = strings .ToLower (argArr [0 ])
77
+ version = ""
78
+ }
79
+ source , err := manager .LookupSdkWithInstall (name )
80
+ if err != nil {
81
+ errorStore .AddAndShow (name , err )
82
+ continue
83
+ }
84
+
85
+ err = source .Install (version )
86
+ if errors .Is (err , internal .ErrNoVersionProvided ) {
87
+ showAvailable , _ := pterm .DefaultInteractiveConfirm .Show (fmt .Sprintf ("No %s version provided, do you want to select a version to install?" , name ))
88
+ if showAvailable {
89
+ err := RunSearch (name , []string {})
90
+ if err != nil {
91
+ errorStore .AddAndShow (name , err )
92
+ }
93
+ continue
94
+ }
95
+ }
96
+
97
+ if err != nil {
98
+ errorStore .AddAndShow (name , err )
99
+ continue
100
+ }
73
101
}
74
- return source .Install (version )
75
102
}
103
+
104
+ notes := errorStore .GetNotesSet ()
105
+
106
+ if notes .Len () == 1 {
107
+ return fmt .Errorf ("failed to install %s" , notes .Slice ()[0 ])
108
+ } else if notes .Len () > 1 {
109
+ return fmt .Errorf ("failed to install some SDKs: %s" , strings .Join (notes .Slice (), ", " ))
110
+ }
111
+
112
+ return nil
76
113
}
77
114
78
115
func installAll () error {
0 commit comments