github.com/mhlo/force@v0.22.28-0.20150915022417-6d05ecfb0b47/help.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"log"
     7  	"os"
     8  	"text/template"
     9  )
    10  
    11  var cmdHelp = &Command{
    12  	Usage: "help [topic]",
    13  	Short: "Show this help",
    14  	Long:  `Help shows usage for a command.`,
    15  }
    16  
    17  func init() {
    18  	cmdHelp.Run = runHelp // break init loop
    19  }
    20  
    21  func runHelp(cmd *Command, args []string) {
    22  	if len(args) == 0 {
    23  		printUsage()
    24  		return
    25  	}
    26  	if len(args) != 1 {
    27  		log.Fatal("too many arguments")
    28  	}
    29  
    30  	for _, cmd := range commands {
    31  		if cmd.Name() == args[0] {
    32  			cmd.printUsage()
    33  			return
    34  		}
    35  	}
    36  
    37  	fmt.Fprintf(os.Stderr, "Unknown help topic: %q. Run 'force help'.\n", args[0])
    38  	os.Exit(2)
    39  }
    40  
    41  var usageTemplate = template.Must(template.New("usage").Parse(`
    42  Usage: force <command> [<args>]
    43  
    44  Available commands:{{range .Commands}}{{if .Runnable}}{{if .List}}
    45     {{.Name | printf "%-8s"}}  {{.Short}}{{end}}{{end}}{{end}}
    46  
    47  Run 'force help [command]' for details.
    48  `[1:]))
    49  
    50  func printUsage() {
    51  	usageTemplate.Execute(os.Stdout, struct {
    52  		Commands []*Command
    53  	}{
    54  		commands,
    55  	})
    56  }
    57  
    58  func usage() {
    59  	flag.PrintDefaults()
    60  	printUsage()
    61  	os.Exit(2)
    62  }