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 }