From 5876e5a9de97647b0f77910c66c8b02b8fd94bb4 Mon Sep 17 00:00:00 2001 From: Alexander Trost Date: Fri, 13 Jul 2018 23:19:55 +0200 Subject: [PATCH] Run Persistent*Run from root to sub Call all Persitent*Run defined from sub to root Signed-off-by: Alexander Trost --- command.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/command.go b/command.go index 34d1bf36..c5c0b437 100644 --- a/command.go +++ b/command.go @@ -736,17 +736,22 @@ func (c *Command) execute(a []string) (err error) { return err } + persistentPreRuns := []*Command{} 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 err := p.PersistentPreRunE(c, argWoFlags); err != nil { return err } - break } else if p.PersistentPreRun != nil { p.PersistentPreRun(c, argWoFlags) - break } } + if c.PreRunE != nil { if err := c.PreRunE(c, argWoFlags); err != nil { return err @@ -765,6 +770,7 @@ func (c *Command) execute(a []string) (err error) { } else { c.Run(c, argWoFlags) } + if c.PostRunE != nil { if err := c.PostRunE(c, argWoFlags); err != nil { return err @@ -772,15 +778,20 @@ func (c *Command) execute(a []string) (err error) { } else if c.PostRun != nil { c.PostRun(c, argWoFlags) } + + persistentPostRuns := []*Command{} 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 err := p.PersistentPostRunE(c, argWoFlags); err != nil { return err } - break } else if p.PersistentPostRun != nil { p.PersistentPostRun(c, argWoFlags) - break } }