Merge pull request #134 from apriendeau/master
#67 creates RunE functions to allow for errors to populate to the top
This commit is contained in:
		
							
								
								
									
										43
									
								
								command.go
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								command.go
									
									
									
									
									
								
							@ -66,14 +66,24 @@ type Command struct {
 | 
				
			|||||||
	// All functions get the same args, the arguments after the command name
 | 
						// All functions get the same args, the arguments after the command name
 | 
				
			||||||
	// PersistentPreRun: children of this command will inherit and execute
 | 
						// PersistentPreRun: children of this command will inherit and execute
 | 
				
			||||||
	PersistentPreRun func(cmd *Command, args []string)
 | 
						PersistentPreRun func(cmd *Command, args []string)
 | 
				
			||||||
 | 
						// PersistentPreRunE: PersistentPreRun but returns an error
 | 
				
			||||||
 | 
						PersistentPreRunE func(cmd *Command, args []string) error
 | 
				
			||||||
	// PreRun: children of this command will not inherit.
 | 
						// PreRun: children of this command will not inherit.
 | 
				
			||||||
	PreRun func(cmd *Command, args []string)
 | 
						PreRun func(cmd *Command, args []string)
 | 
				
			||||||
 | 
						// PreRunE: PreRun but returns an error
 | 
				
			||||||
 | 
						PreRunE func(cmd *Command, args []string) error
 | 
				
			||||||
	// Run: Typically the actual work function. Most commands will only implement this
 | 
						// Run: Typically the actual work function. Most commands will only implement this
 | 
				
			||||||
	Run func(cmd *Command, args []string)
 | 
						Run func(cmd *Command, args []string)
 | 
				
			||||||
 | 
						// RunE: Run but returns an error
 | 
				
			||||||
 | 
						RunE func(cmd *Command, args []string) error
 | 
				
			||||||
	// PostRun: run after the Run command.
 | 
						// PostRun: run after the Run command.
 | 
				
			||||||
	PostRun func(cmd *Command, args []string)
 | 
						PostRun func(cmd *Command, args []string)
 | 
				
			||||||
 | 
						// PostRunE: PostRun but returns an error
 | 
				
			||||||
 | 
						PostRunE func(cmd *Command, args []string) error
 | 
				
			||||||
	// PersistentPostRun: children of this command will inherit and execute after PostRun
 | 
						// PersistentPostRun: children of this command will inherit and execute after PostRun
 | 
				
			||||||
	PersistentPostRun func(cmd *Command, args []string)
 | 
						PersistentPostRun func(cmd *Command, args []string)
 | 
				
			||||||
 | 
						// PersistentPostRunE: PersistentPostRun but returns an error
 | 
				
			||||||
 | 
						PersistentPostRunE func(cmd *Command, args []string) error
 | 
				
			||||||
	// Commands is the list of commands supported by this program.
 | 
						// Commands is the list of commands supported by this program.
 | 
				
			||||||
	commands []*Command
 | 
						commands []*Command
 | 
				
			||||||
	// Parent Command for this command
 | 
						// Parent Command for this command
 | 
				
			||||||
@ -474,22 +484,45 @@ func (c *Command) execute(a []string) (err error) {
 | 
				
			|||||||
	argWoFlags := c.Flags().Args()
 | 
						argWoFlags := c.Flags().Args()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for p := c; p != nil; p = p.Parent() {
 | 
						for p := c; p != nil; p = p.Parent() {
 | 
				
			||||||
		if p.PersistentPreRun != nil {
 | 
							if p.PersistentPreRunE != nil {
 | 
				
			||||||
 | 
								if err := p.PersistentPostRunE(c, argWoFlags); err != nil {
 | 
				
			||||||
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							} else if p.PersistentPreRun != nil {
 | 
				
			||||||
			p.PersistentPreRun(c, argWoFlags)
 | 
								p.PersistentPreRun(c, argWoFlags)
 | 
				
			||||||
			break
 | 
								break
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if c.PreRun != nil {
 | 
						if c.PreRunE != nil {
 | 
				
			||||||
 | 
							if err := c.PreRunE(c, argWoFlags); err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else if c.PreRun != nil {
 | 
				
			||||||
		c.PreRun(c, argWoFlags)
 | 
							c.PreRun(c, argWoFlags)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if c.RunE != nil {
 | 
				
			||||||
 | 
							if err := c.RunE(c, argWoFlags); err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
		c.Run(c, argWoFlags)
 | 
							c.Run(c, argWoFlags)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if c.PostRun != nil {
 | 
						if c.PostRunE != nil {
 | 
				
			||||||
 | 
							if err := c.PostRunE(c, argWoFlags); err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else if c.PostRun != nil {
 | 
				
			||||||
		c.PostRun(c, argWoFlags)
 | 
							c.PostRun(c, argWoFlags)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for p := c; p != nil; p = p.Parent() {
 | 
						for p := c; p != nil; p = p.Parent() {
 | 
				
			||||||
		if p.PersistentPostRun != nil {
 | 
							if p.PersistentPostRunE != nil {
 | 
				
			||||||
 | 
								if err := p.PersistentPostRunE(c, argWoFlags); err != nil {
 | 
				
			||||||
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							} else if p.PersistentPostRun != nil {
 | 
				
			||||||
			p.PersistentPostRun(c, argWoFlags)
 | 
								p.PersistentPostRun(c, argWoFlags)
 | 
				
			||||||
			break
 | 
								break
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user