Implement *Context.GlobalSet + relevant CHANGELOG entry
This commit is contained in:
parent
4edb5c9a6b
commit
e059dc8188
@ -8,6 +8,8 @@
|
|||||||
- This file!
|
- This file!
|
||||||
- Support for placeholders in flag usage strings
|
- Support for placeholders in flag usage strings
|
||||||
- `App.Metadata` map for arbitrary data/state management
|
- `App.Metadata` map for arbitrary data/state management
|
||||||
|
- `Set` and `GlobalSet` methods on `*cli.Context` for altering values after
|
||||||
|
parsing.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- The `App.Action` and `Command.Action` now prefer a return signature of
|
- The `App.Action` and `Command.Action` now prefer a return signature of
|
||||||
|
20
context.go
20
context.go
@ -146,6 +146,11 @@ func (c *Context) Set(name, value string) error {
|
|||||||
return c.flagSet.Set(name, value)
|
return c.flagSet.Set(name, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GlobalSet sets a context flag to a value on the global flagset
|
||||||
|
func (c *Context) GlobalSet(name, value string) error {
|
||||||
|
return globalContext(c).flagSet.Set(name, value)
|
||||||
|
}
|
||||||
|
|
||||||
// Determines if the flag was actually set
|
// Determines if the flag was actually set
|
||||||
func (c *Context) IsSet(name string) bool {
|
func (c *Context) IsSet(name string) bool {
|
||||||
if c.setFlags == nil {
|
if c.setFlags == nil {
|
||||||
@ -252,6 +257,21 @@ func (a Args) Swap(from, to int) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func globalContext(ctx *Context) *Context {
|
||||||
|
if ctx == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
if ctx.parentContext == nil {
|
||||||
|
return ctx
|
||||||
|
}
|
||||||
|
ctx = ctx.parentContext
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func lookupGlobalFlagSet(name string, ctx *Context) *flag.FlagSet {
|
func lookupGlobalFlagSet(name string, ctx *Context) *flag.FlagSet {
|
||||||
if ctx.parentContext != nil {
|
if ctx.parentContext != nil {
|
||||||
ctx = ctx.parentContext
|
ctx = ctx.parentContext
|
||||||
|
@ -211,3 +211,22 @@ func TestContext_Set(t *testing.T) {
|
|||||||
c.Set("int", "1")
|
c.Set("int", "1")
|
||||||
expect(t, c.Int("int"), 1)
|
expect(t, c.Int("int"), 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestContext_GlobalSet(t *testing.T) {
|
||||||
|
gSet := flag.NewFlagSet("test", 0)
|
||||||
|
gSet.Int("int", 5, "an int")
|
||||||
|
|
||||||
|
set := flag.NewFlagSet("sub", 0)
|
||||||
|
set.Int("int", 3, "an int")
|
||||||
|
|
||||||
|
pc := NewContext(nil, gSet, nil)
|
||||||
|
c := NewContext(nil, set, pc)
|
||||||
|
|
||||||
|
c.Set("int", "1")
|
||||||
|
expect(t, c.Int("int"), 1)
|
||||||
|
expect(t, c.GlobalInt("int"), 5)
|
||||||
|
|
||||||
|
c.GlobalSet("int", "1")
|
||||||
|
expect(t, c.Int("int"), 1)
|
||||||
|
expect(t, c.GlobalInt("int"), 1)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user