-
Notifications
You must be signed in to change notification settings - Fork 202
/
install.go
100 lines (79 loc) · 1.79 KB
/
install.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package pkgmgmt
import (
"net/url"
"strings"
"github.com/pkg/errors"
)
type InstallOptions struct {
Name string
URL string
FeedURL string
Version string
parsedURL *url.URL
parsedFeedURL *url.URL
DefaultFeedURL string
}
// GetParsedURL returns a copy of of the parsed URL that is safe to modify.
func (o *InstallOptions) GetParsedURL() url.URL {
return *o.parsedURL
}
func (o *InstallOptions) GetParsedFeedURL() url.URL {
return *o.parsedFeedURL
}
func (o *InstallOptions) Validate(args []string) error {
err := o.validateName(args)
if err != nil {
return err
}
err = o.validateFeedURL()
if err != nil {
return err
}
err = o.validateURL()
if err != nil {
return err
}
o.defaultVersion()
return nil
}
func (o *InstallOptions) validateURL() error {
if o.URL == "" {
return nil
}
parsedURL, err := url.Parse(o.URL)
if err != nil {
return errors.Wrapf(err, "invalid --url %s", o.URL)
}
o.parsedURL = parsedURL
return nil
}
func (o *InstallOptions) validateFeedURL() error {
if o.URL == "" && o.FeedURL == "" {
o.FeedURL = o.DefaultFeedURL
}
if o.FeedURL != "" {
parsedFeedURL, err := url.Parse(o.FeedURL)
if err != nil {
return errors.Wrapf(err, "invalid --feed-url %s", o.FeedURL)
}
o.parsedFeedURL = parsedFeedURL
}
return nil
}
func (o *InstallOptions) defaultVersion() {
if o.Version == "" {
o.Version = "latest"
}
}
// validateName grabs the name from the first positional argument.
func (o *InstallOptions) validateName(args []string) error {
switch len(args) {
case 0:
return errors.Errorf("no name was specified")
case 1:
o.Name = strings.ToLower(args[0])
return nil
default:
return errors.Errorf("only one positional argument may be specified, the name, but multiple were received: %s", args)
}
}