Add support for an InitializeConfig method as defined on Cobra by the user
This commit is contained in:
		
							
								
								
									
										7
									
								
								cobra.go
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								cobra.go
									
									
									
									
									
								
							@ -25,6 +25,13 @@ import (
 | 
				
			|||||||
	"text/template"
 | 
						"text/template"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Called after flags are parsed immediately before executing any Command
 | 
				
			||||||
 | 
					var InitializeConfig func()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						InitializeConfig = func() {}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Gt(a interface{}, b interface{}) bool {
 | 
					func Gt(a interface{}, b interface{}) bool {
 | 
				
			||||||
	var left, right int64
 | 
						var left, right int64
 | 
				
			||||||
	av := reflect.ValueOf(a)
 | 
						av := reflect.ValueOf(a)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								command.go
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								command.go
									
									
									
									
									
								
							@ -350,12 +350,17 @@ func (c *Command) execute(a []string) (err error) {
 | 
				
			|||||||
			return nil
 | 
								return nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							c.preRun()
 | 
				
			||||||
		argWoFlags := c.Flags().Args()
 | 
							argWoFlags := c.Flags().Args()
 | 
				
			||||||
		c.Run(c, argWoFlags)
 | 
							c.Run(c, argWoFlags)
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *Command) preRun() {
 | 
				
			||||||
 | 
						InitializeConfig()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Command) errorMsgFromParse() string {
 | 
					func (c *Command) errorMsgFromParse() string {
 | 
				
			||||||
	s := c.flagErrorBuf.String()
 | 
						s := c.flagErrorBuf.String()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -403,15 +408,16 @@ func (c *Command) Execute() (err error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Now handle the case where the root is runnable and only flags are provided
 | 
						// Now handle the case where the root is runnable and only flags are provided
 | 
				
			||||||
	if err != nil && c.Runnable() {
 | 
						if err != nil && c.Runnable() {
 | 
				
			||||||
 | 
							// This is pretty much a custom version of the *Command.execute method
 | 
				
			||||||
 | 
							// with a few differences because it's the final command (no fall back)
 | 
				
			||||||
		e := c.ParseFlags(args)
 | 
							e := c.ParseFlags(args)
 | 
				
			||||||
		if e != nil {
 | 
							if e != nil {
 | 
				
			||||||
			// Flags parsing had an error.
 | 
								// Flags parsing had an error.
 | 
				
			||||||
			//fmt.Println(e)
 | 
								// If an error happens here, we have to report it to the user
 | 
				
			||||||
			c.Println(c.errorMsgFromParse())
 | 
								c.Println(c.errorMsgFromParse())
 | 
				
			||||||
			c.Usage()
 | 
								c.Usage()
 | 
				
			||||||
			return e
 | 
								return e
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 | 
					 | 
				
			||||||
			// If help is called, regardless of other flags, we print that
 | 
								// If help is called, regardless of other flags, we print that
 | 
				
			||||||
			if c.helpFlagVal {
 | 
								if c.helpFlagVal {
 | 
				
			||||||
				c.Help()
 | 
									c.Help()
 | 
				
			||||||
@ -420,8 +426,13 @@ func (c *Command) Execute() (err error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			argWoFlags := c.Flags().Args()
 | 
								argWoFlags := c.Flags().Args()
 | 
				
			||||||
			if len(argWoFlags) > 0 {
 | 
								if len(argWoFlags) > 0 {
 | 
				
			||||||
 | 
									// If there are arguments (not flags) one of the earlier
 | 
				
			||||||
 | 
									// cases should have caught it.. It means invalid usage
 | 
				
			||||||
 | 
									// print the usage
 | 
				
			||||||
				c.Usage()
 | 
									c.Usage()
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
 | 
									// Only flags left... Call root.Run
 | 
				
			||||||
 | 
									c.preRun()
 | 
				
			||||||
				c.Run(c, argWoFlags)
 | 
									c.Run(c, argWoFlags)
 | 
				
			||||||
				err = nil
 | 
									err = nil
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user