26
26
errInvalidOverride = errors .New ("\" override\" must be a TOML array of tables" )
27
27
errInvalidRequired = errors .New ("\" required\" must be a TOML list of strings" )
28
28
errInvalidIgnored = errors .New ("\" ignored\" must be a TOML list of strings" )
29
+ errInvalidPrune = errors .New ("\" prune\" must be a TOML table of boolean values" )
29
30
)
30
31
31
32
// Manifest holds manifest file data and implements gps.RootManifest.
@@ -51,6 +52,14 @@ type rawProject struct {
51
52
Source string `toml:"source,omitempty"`
52
53
}
53
54
55
+ // NewManifest instantites a new manifest.
56
+ func NewManifest () * Manifest {
57
+ return & Manifest {
58
+ Constraints : make (gps.ProjectConstraints ),
59
+ Ovr : make (gps.ProjectConstraints ),
60
+ }
61
+ }
62
+
54
63
func validateManifest (s string ) ([]error , error ) {
55
64
var warns []error
56
65
// Load the TomlTree from string
@@ -103,7 +112,7 @@ func validateManifest(s string) ([]error, error) {
103
112
}
104
113
default :
105
114
// unknown/invalid key
106
- warns = append (warns , fmt .Errorf ("Invalid key %q in %q" , key , prop ))
115
+ warns = append (warns , fmt .Errorf ("invalid key %q in %q" , key , prop ))
107
116
}
108
117
}
109
118
}
@@ -140,8 +149,24 @@ func validateManifest(s string) ([]error, error) {
140
149
return warns , errInvalidRequired
141
150
}
142
151
}
152
+ case "prune" :
153
+ // Check if prune is of Map type
154
+ if reflect .TypeOf (val ).Kind () != reflect .Map {
155
+ warns = append (warns , errors .New ("prune should be a TOML table" ))
156
+ }
157
+ for key , value := range val .(map [string ]interface {}) {
158
+ switch key {
159
+ case "non-go" , "go-tests" , "unused-packages" :
160
+ if _ , ok := value .(bool ); ! ok {
161
+ warns = append (warns , errors .Errorf ("unexpected type for prune.%s: %T" , key , value ))
162
+ return warns , errInvalidPrune
163
+ }
164
+ default :
165
+ warns = append (warns , errors .Errorf ("unknown field: prune.%s" , key ))
166
+ }
167
+ }
143
168
default :
144
- warns = append (warns , fmt .Errorf ("Unknown field in manifest: %v" , prop ))
169
+ warns = append (warns , fmt .Errorf ("unknown field in manifest: %v" , prop ))
145
170
}
146
171
}
147
172
@@ -172,12 +197,12 @@ func readManifest(r io.Reader) (*Manifest, []error, error) {
172
197
}
173
198
174
199
func fromRawManifest (raw rawManifest ) (* Manifest , error ) {
175
- m := & Manifest {
176
- Constraints : make (gps. ProjectConstraints , len ( raw . Constraints )),
177
- Ovr : make (gps.ProjectConstraints , len (raw .Overrides )),
178
- Ignored : raw .Ignored ,
179
- Required : raw .Required ,
180
- }
200
+ m := NewManifest ()
201
+
202
+ m . Constraints = make (gps.ProjectConstraints , len (raw .Constraints ))
203
+ m . Ovr = make (gps. ProjectConstraints , len ( raw .Overrides ))
204
+ m . Ignored = raw .Ignored
205
+ m . Required = raw . Required
181
206
182
207
for i := 0 ; i < len (raw .Constraints ); i ++ {
183
208
name , prj , err := toProject (raw .Constraints [i ])
0 commit comments