add ability to parse []string types
This commit is contained in:
parent
e8d8047f49
commit
4d9038a156
@ -1,9 +1,9 @@
|
|||||||
package cli
|
package cli
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ type Command struct {
|
|||||||
ShortName string
|
ShortName string
|
||||||
Usage string
|
Usage string
|
||||||
Description string
|
Description string
|
||||||
Action func (context *Context)
|
Action func(context *Context)
|
||||||
Flags []Flag
|
Flags []Flag
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +52,6 @@ func (c Command) Run(ctx *Context) {
|
|||||||
|
|
||||||
context := NewContext(ctx.App, set, ctx.globalSet)
|
context := NewContext(ctx.App, set, ctx.globalSet)
|
||||||
checkCommandHelp(context, c.Name)
|
checkCommandHelp(context, c.Name)
|
||||||
|
|
||||||
c.Action(context)
|
c.Action(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
context.go
13
context.go
@ -34,6 +34,10 @@ func (c *Context) String(name string) string {
|
|||||||
return c.lookupString(name, c.flagSet)
|
return c.lookupString(name, c.flagSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Context) StringSlice(name string) flag.Value {
|
||||||
|
return c.lookupStringSlice(name, c.flagSet)
|
||||||
|
}
|
||||||
|
|
||||||
// Looks up the value of a global int flag, returns 0 if no int flag exists
|
// Looks up the value of a global int flag, returns 0 if no int flag exists
|
||||||
func (c *Context) GlobalInt(name string) int {
|
func (c *Context) GlobalInt(name string) int {
|
||||||
return c.lookupInt(name, c.globalSet)
|
return c.lookupInt(name, c.globalSet)
|
||||||
@ -75,6 +79,15 @@ func (c *Context) lookupString(name string, set *flag.FlagSet) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Context) lookupStringSlice(name string, set *flag.FlagSet) flag.Value {
|
||||||
|
f := set.Lookup(name)
|
||||||
|
if f != nil {
|
||||||
|
return f.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Context) lookupBool(name string, set *flag.FlagSet) bool {
|
func (c *Context) lookupBool(name string, set *flag.FlagSet) bool {
|
||||||
f := set.Lookup(name)
|
f := set.Lookup(name)
|
||||||
if f != nil {
|
if f != nil {
|
||||||
|
34
flag.go
34
flag.go
@ -8,14 +8,48 @@ type Flag interface {
|
|||||||
Apply(*flag.FlagSet)
|
Apply(*flag.FlagSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SliceFlag interface {
|
||||||
|
Value() []string
|
||||||
|
}
|
||||||
|
|
||||||
func flagSet(name string, flags []Flag) *flag.FlagSet {
|
func flagSet(name string, flags []Flag) *flag.FlagSet {
|
||||||
set := flag.NewFlagSet(name, flag.ContinueOnError)
|
set := flag.NewFlagSet(name, flag.ContinueOnError)
|
||||||
|
|
||||||
for _, f := range flags {
|
for _, f := range flags {
|
||||||
f.Apply(set)
|
f.Apply(set)
|
||||||
}
|
}
|
||||||
return set
|
return set
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type StringSlice []string
|
||||||
|
|
||||||
|
func (i *StringSlice) Set(value string) error {
|
||||||
|
*i = append(*i, value)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *StringSlice) String() string {
|
||||||
|
return fmt.Sprintf("%s", *i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *StringSlice) Value() []string {
|
||||||
|
return *i
|
||||||
|
}
|
||||||
|
|
||||||
|
type StringSliceFlag struct {
|
||||||
|
Name string
|
||||||
|
Value *StringSlice
|
||||||
|
Usage string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f StringSliceFlag) String() string {
|
||||||
|
return fmt.Sprintf("%s%v '%v'\t%v", prefixFor(f.Name), f.Name, "-"+f.Name+" option -"+f.Name+" option", f.Usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f StringSliceFlag) Apply(set *flag.FlagSet) {
|
||||||
|
set.Var(f.Value, f.Name, f.Usage)
|
||||||
|
}
|
||||||
|
|
||||||
type BoolFlag struct {
|
type BoolFlag struct {
|
||||||
Name string
|
Name string
|
||||||
Usage string
|
Usage string
|
||||||
|
Loading…
Reference in New Issue
Block a user