MCPcopy Create free account
hub / github.com/google/pprof / installConfigFlags

Function installConfigFlags

internal/driver/cli.go:203–265  ·  view source on GitHub ↗

installConfigFlags creates command line flags for configuration fields and returns a function which can be called after flags have been parsed to copy any flags specified on the command line to *cfg.

(flag plugin.FlagSet, cfg *config)

Source from the content-addressed store, hash-verified

201// been parsed to copy any flags specified on the command line to
202// *cfg.
203func installConfigFlags(flag plugin.FlagSet, cfg *config) func() error {
204 // List of functions for setting the different parts of a config.
205 var setters []func()
206 var err error // Holds any errors encountered while running setters.
207
208 for _, field := range configFields {
209 n := field.name
210 help := configHelp[n]
211 var setter func()
212 switch ptr := cfg.fieldPtr(field).(type) {
213 case *bool:
214 f := flag.Bool(n, *ptr, help)
215 setter = func() { *ptr = *f }
216 case *int:
217 f := flag.Int(n, *ptr, help)
218 setter = func() { *ptr = *f }
219 case *float64:
220 f := flag.Float64(n, *ptr, help)
221 setter = func() { *ptr = *f }
222 case *string:
223 if len(field.choices) == 0 {
224 f := flag.String(n, *ptr, help)
225 setter = func() { *ptr = *f }
226 } else {
227 // Make a separate flag per possible choice.
228 // Set all flags to initially false so we can
229 // identify conflicts.
230 bools := make(map[string]*bool)
231 for _, choice := range field.choices {
232 bools[choice] = flag.Bool(choice, false, configHelp[choice])
233 }
234 setter = func() {
235 var set []string
236 for k, v := range bools {
237 if *v {
238 set = append(set, k)
239 }
240 }
241 switch len(set) {
242 case 0:
243 // Leave as default value.
244 case 1:
245 *ptr = set[0]
246 default:
247 err = fmt.Errorf("conflicting options set: %v", set)
248 }
249 }
250 }
251 }
252 setters = append(setters, setter)
253 }
254
255 return func() error {
256 // Apply the setter for every flag.
257 for _, setter := range setters {
258 setter()
259 if err != nil {
260 return err

Callers 1

parseFlagsFunction · 0.85

Calls 5

fieldPtrMethod · 0.80
BoolMethod · 0.65
IntMethod · 0.65
Float64Method · 0.65
StringMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…