From 220e00224cde23656a73cbe826f9533f9f107056 Mon Sep 17 00:00:00 2001 From: Yann Soubeyrand Date: Tue, 14 Jul 2020 19:15:52 +0200 Subject: [PATCH] Add OnFinalize method This method is the OnInitialize counterpart. Like OnInitialize which allows loading the configuration before each command is executed, OnFinalize allows saving the configuration after each command has been executed. --- cobra.go | 7 +++++++ command.go | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/cobra.go b/cobra.go index d6cbfd71..dcc7b0f5 100644 --- a/cobra.go +++ b/cobra.go @@ -39,6 +39,7 @@ var templateFuncs = template.FuncMap{ } var initializers []func() +var finalizers []func() // EnablePrefixMatching allows to set automatic prefix matching. Automatic prefix matching can be a dangerous thing // to automatically enable in CLI tools. @@ -84,6 +85,12 @@ func OnInitialize(y ...func()) { initializers = append(initializers, y...) } +// OnFinalize sets the passed functions to be run when each command's +// Execute method is terminated. +func OnFinalize(y ...func()) { + finalizers = append(finalizers, y...) +} + // FIXME Gt is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra. // Gt takes two types and checks whether the first type is greater than the second. In case of types Arrays, Chans, diff --git a/command.go b/command.go index 675bb134..75d2dda9 100644 --- a/command.go +++ b/command.go @@ -833,6 +833,8 @@ func (c *Command) execute(a []string) (err error) { c.preRun() + defer c.postRun() + argWoFlags := c.Flags().Args() if c.DisableFlagParsing { argWoFlags = a @@ -903,6 +905,12 @@ func (c *Command) preRun() { } } +func (c *Command) postRun() { + for _, x := range finalizers { + x() + } +} + // ExecuteContext is the same as Execute(), but sets the ctx on the command. // Retrieve ctx by calling cmd.Context() inside your *Run lifecycle or ValidArgs // functions.