-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflag_merged.go
102 lines (88 loc) · 2.38 KB
/
flag_merged.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
101
102
package command
import (
"fmt"
)
type mergedFlagDef struct {
flagInfo
applied bool
flagDefs []*flagDef
}
func (mfd *mergedFlagDef) addFlagDef(fd *flagDef) error {
if fd.Name != mfd.Name {
return fmt.Errorf("given flag '%s' has incompatible name - must be '%s'", fd.Name, mfd.Name)
}
if mfd.EnvVarName == nil {
if fd.EnvVarName != nil {
mfd.EnvVarName = fd.EnvVarName
}
} else if fd.EnvVarName != nil {
if *mfd.EnvVarName != *fd.EnvVarName {
return fmt.Errorf("flag '%s' has incompatible environment variable name '%v' - must be '%v'", fd.Name, *fd.EnvVarName, *mfd.EnvVarName)
}
}
if fd.HasValue != mfd.HasValue {
if mfd.HasValue {
return fmt.Errorf("given flag '%s' must have a value, but it does not", fd.Name)
} else {
return fmt.Errorf("given flag '%s' must not have a value, but it does", fd.Name)
}
}
if mfd.ValueName == nil {
if fd.ValueName != nil {
mfd.ValueName = fd.ValueName
}
} else if fd.ValueName != nil {
if *mfd.ValueName != *fd.ValueName {
return fmt.Errorf("flag '%s' has incompatible value-name '%v' - must be '%v'", fd.Name, *fd.ValueName, *mfd.ValueName)
}
}
if mfd.Description == nil {
if fd.Description != nil {
mfd.Description = fd.Description
}
} else if fd.Description != nil {
if *mfd.Description != *fd.Description {
return fmt.Errorf("flag '%s' has incompatible description", fd.Name)
}
}
if mfd.Required == nil {
if fd.Required != nil {
mfd.Required = fd.Required
}
} else if *mfd.Required {
if fd.Required != nil && !*fd.Required {
return fmt.Errorf("flag '%s' is incompatibly optional - must be required", fd.Name)
}
}
if fd.DefaultValue != mfd.DefaultValue {
return fmt.Errorf("flag '%s' has incompatible default value '%s' - must be '%s'", fd.Name, fd.DefaultValue, mfd.DefaultValue)
}
mfd.flagDefs = append(mfd.flagDefs, fd)
return nil
}
func (mfd *mergedFlagDef) setValue(v string) error {
mfd.applied = true
for _, fd := range mfd.flagDefs {
if err := fd.setValue(v); err != nil {
return err
}
}
return nil
}
func (mfd *mergedFlagDef) isRequired() bool {
return mfd.Required != nil && *mfd.Required
}
func (mfd *mergedFlagDef) isMissing() bool {
return mfd.isRequired() && !mfd.applied
}
func (mfd *mergedFlagDef) getValueName() string {
if mfd.HasValue {
if mfd.ValueName != nil {
return *mfd.ValueName
} else {
return "VALUE"
}
} else {
return ""
}
}