func TestApp_RunAsSubcommandParseFlags(t *testing.T) { var context *cli.Context a := cli.NewApp() a.Commands = []cli.Command{ { Name: "foo", Action: func(c *cli.Context) { context = c }, Flags: []cli.Flag{ cli.StringFlag{ Name: "lang", Value: "english", Usage: "language for the greeting", }, }, Before: func(_ *cli.Context) error { return nil }, }, } a.Run([]string{"", "foo", "--lang", "spanish", "abcd"}) expect(t, context.Args().Get(0), "abcd") expect(t, context.String("lang"), "spanish") }
func configfile(c *cli.Context, have map[string]authCred, need map[string]string) error { dir, err := util.RackDir() if err != nil { // return fmt.Errorf("Error retrieving rack directory: %s\n", err) return nil } f := path.Join(dir, "config") cfg, err := ini.Load(f) if err != nil { // return fmt.Errorf("Error loading config file: %s\n", err) return nil } cfg.BlockMode = false var profile string if c.GlobalIsSet("profile") { profile = c.GlobalString("profile") } else if c.IsSet("profile") { profile = c.String("profile") } section, err := cfg.GetSection(profile) if err != nil && profile != "" { return fmt.Errorf("Invalid config file profile: %s\n", profile) } for opt := range need { if val := section.Key(opt).String(); val != "" { have[opt] = authCred{value: val, from: fmt.Sprintf("config file (profile: %s)", section.Name())} delete(need, opt) } } return nil }
func CLIopts(c *cli.Context, have map[string]Cred, need map[string]string) { for opt := range need { if c.IsSet(opt) { have[opt] = Cred{Value: c.String(opt), From: "command-line"} delete(need, opt) } } }
func cliopts(c *cli.Context, have map[string]authCred, need map[string]string) { for opt := range need { if c.GlobalIsSet(opt) { have[opt] = authCred{value: c.GlobalString(opt), from: "command-line"} delete(need, opt) } else if c.IsSet(opt) { have[opt] = authCred{value: c.String(opt), from: "command-line"} delete(need, opt) } } }
func ConfigFile(c *cli.Context, have map[string]Cred, need map[string]string) error { var profile string if c.IsSet("profile") { profile = c.String("profile") } section, err := ProfileSection(profile) if err != nil { return err } if section == nil { return nil } for opt := range need { if val := section.Key(opt).String(); val != "" { have[opt] = Cred{Value: val, From: fmt.Sprintf("config file (profile: %s)", section.Name())} delete(need, opt) } } if profile != "" { section, err := ProfileSection("") if err != nil { return err } for opt := range need { if val := section.Key(opt).String(); val != "" { have[opt] = Cred{Value: val, From: fmt.Sprintf("config file (profile: default)")} delete(need, opt) } } } return nil }