Run Persistent*Run from root to sub

Call all Persitent*Run defined from sub to root

Signed-off-by: Alexander Trost <galexrt@googlemail.com>
This commit is contained in:
Alexander Trost 2018-07-13 23:19:55 +02:00
parent a114f312e0
commit 5876e5a9de
No known key found for this signature in database
GPG key ID: 5CF1D4600D4CBFDF

View file

@ -736,17 +736,22 @@ func (c *Command) execute(a []string) (err error) {
return err return err
} }
persistentPreRuns := []*Command{}
for p := c; p != nil; p = p.Parent() { for p := c; p != nil; p = p.Parent() {
persistentPreRuns = append(persistentPreRuns, p)
}
for i := len(persistentPreRuns) - 1; i >= 0; i-- {
p := persistentPreRuns[i]
if p.PersistentPreRunE != nil { if p.PersistentPreRunE != nil {
if err := p.PersistentPreRunE(c, argWoFlags); err != nil { if err := p.PersistentPreRunE(c, argWoFlags); err != nil {
return err return err
} }
break
} else if p.PersistentPreRun != nil { } else if p.PersistentPreRun != nil {
p.PersistentPreRun(c, argWoFlags) p.PersistentPreRun(c, argWoFlags)
break
} }
} }
if c.PreRunE != nil { if c.PreRunE != nil {
if err := c.PreRunE(c, argWoFlags); err != nil { if err := c.PreRunE(c, argWoFlags); err != nil {
return err return err
@ -765,6 +770,7 @@ func (c *Command) execute(a []string) (err error) {
} else { } else {
c.Run(c, argWoFlags) c.Run(c, argWoFlags)
} }
if c.PostRunE != nil { if c.PostRunE != nil {
if err := c.PostRunE(c, argWoFlags); err != nil { if err := c.PostRunE(c, argWoFlags); err != nil {
return err return err
@ -772,15 +778,20 @@ func (c *Command) execute(a []string) (err error) {
} else if c.PostRun != nil { } else if c.PostRun != nil {
c.PostRun(c, argWoFlags) c.PostRun(c, argWoFlags)
} }
persistentPostRuns := []*Command{}
for p := c; p != nil; p = p.Parent() { for p := c; p != nil; p = p.Parent() {
persistentPostRuns = append(persistentPostRuns, p)
}
for i := len(persistentPostRuns) - 1; i >= 0; i-- {
p := persistentPostRuns[i]
if p.PersistentPostRunE != nil { if p.PersistentPostRunE != nil {
if err := p.PersistentPostRunE(c, argWoFlags); err != nil { if err := p.PersistentPostRunE(c, argWoFlags); err != nil {
return err return err
} }
break
} else if p.PersistentPostRun != nil { } else if p.PersistentPostRun != nil {
p.PersistentPostRun(c, argWoFlags) p.PersistentPostRun(c, argWoFlags)
break
} }
} }