File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ gh
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "fmt"
5+ "log"
6+ "os"
7+ "text/template"
8+ )
9+
10+ var cmdVersion = & Command {
11+ Run : runVersion ,
12+ Usage : "version" ,
13+ Short : "show gh version" ,
14+ Long : `Version shows the gh client version showstring.` ,
15+ }
16+
17+ func runVersion (cmd * Command , args []string ) {
18+ fmt .Println (Version )
19+ }
20+
21+ var cmdHelp = & Command {
22+ Usage : "help [command]" ,
23+ Short : "show help" ,
24+ Long : `Help shows usage for a command.` ,
25+ }
26+
27+ func init () {
28+ cmdHelp .Run = runHelp // break init loop
29+ }
30+
31+ func runHelp (cmd * Command , args []string ) {
32+ if len (args ) == 0 {
33+ printUsage ()
34+ return // not os.Exit(2); success
35+ }
36+ if len (args ) != 1 {
37+ log .Fatal ("too many arguments" )
38+ }
39+
40+ for _ , cmd := range commands {
41+ if cmd .Name () == args [0 ] {
42+ cmd .printUsage ()
43+ return
44+ }
45+ }
46+
47+ fmt .Fprintf (os .Stderr , "Unknown help topic: %q. Run 'acldt helpp'.\n " , args [0 ])
48+ os .Exit (2 )
49+ }
50+
51+ var usageTemplate = template .Must (template .New ("usage" ).Parse (`Usage: gh [command] [options] [arguments]
52+
53+ Supported commands are:
54+ {{range .Commands}}{{if .Runnable}}{{if .ShowUsage}}
55+ {{.Name | printf "%-8s"}} {{.Short}}{{end}}{{end}}{{end}}
56+
57+ See 'gh help [command]' for more information about a command.
58+ ` ))
59+
60+ func printUsage () {
61+ usageTemplate .Execute (os .Stdout , struct {
62+ Commands []* Command
63+ }{
64+ commands ,
65+ })
66+ }
67+
68+ func usage () {
69+ printUsage ()
70+ os .Exit (2 )
71+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "flag"
5+ "fmt"
6+ "os"
7+ "strings"
8+ )
9+
10+ type Command struct {
11+ Run func (cmd * Command , args []string )
12+ Flag flag.FlagSet
13+
14+ Usage string
15+ Short string
16+ Long string
17+ }
18+
19+ func (c * Command ) printUsage () {
20+ if c .Runnable () {
21+ fmt .Printf ("Usage: gh %s\n \n " , c .Usage )
22+ }
23+ fmt .Println (strings .Trim (c .Long , "\n " ))
24+ }
25+
26+ func (c * Command ) Name () string {
27+ name := c .Usage
28+ i := strings .Index (name , " " )
29+ if i >= 0 {
30+ name = name [:i ]
31+ }
32+ return name
33+ }
34+
35+ func (c * Command ) Runnable () bool {
36+ return c .Run != nil
37+ }
38+
39+ var commands = []* Command {}
40+
41+ func main () {
42+ args := os .Args [1 :]
43+ if len (args ) < 1 {
44+ usage ()
45+ }
46+
47+ for _ , cmd := range commands {
48+ if cmd .Name () == args [0 ] && cmd .Run != nil {
49+ cmd .Flag .Usage = func () {
50+ cmd .printUsage ()
51+ }
52+ if err := cmd .Flag .Parse (args [1 :]); err != nil {
53+ os .Exit (2 )
54+ }
55+ cmd .Run (cmd , cmd .Flag .Args ())
56+ return
57+ }
58+ }
59+
60+ fmt .Fprintf (os .Stderr , "Unknown command: %s\n " , args [0 ])
61+ usage ()
62+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ const Version = "dev"
You can’t perform that action at this time.
0 commit comments