@@ -2,19 +2,49 @@ package main
22
33import (
44 "flag"
5+ "fmt"
56 "os"
7+ "strings"
68 "time"
79
810 "github.com/danbrakeley/frog"
11+ "github.com/proletariatgames/p4harmonize/internal/buildvar"
912)
1013
11- var (
12- // config will be loaded from the first extant file from this list
13- configFileNames = []string {
14- "config.toml" ,
15- "config.tml" ,
14+ func PrintUsage () {
15+ version := "<local build>"
16+ if len (buildvar .Version ) > 0 {
17+ version = buildvar .Version
18+ }
19+ buildTime := "<not set>"
20+ if len (buildvar .BuildTime ) > 0 {
21+ buildTime = buildvar .BuildTime
22+ }
23+ url := "https://github.com/proletariatgames/p4harmonize"
24+ if len (buildvar .ReleaseURL ) > 0 {
25+ url = buildvar .ReleaseURL
1626 }
17- )
27+
28+ fmt .Fprintf (os .Stderr ,
29+ strings .Join ([]string {
30+ "" ,
31+ "p4harmonize %s, created %s" ,
32+ "%s" ,
33+ "" ,
34+ "Usage:" ,
35+ "\t p4harmonize [--config PATH]" ,
36+ "\t p4harmonize --version" ,
37+ "\t p4harmonize --help" ,
38+ "Options:" ,
39+ "\t -c, --config PATH Config file location (default: 'config.toml')" ,
40+ "\t -v, --version Print just the version number (to stdout)" ,
41+ "\t -h, --help Print this message (to stderr)" ,
42+ "" ,
43+ "Config files must be in TOML format. See the README for an example." ,
44+ "" ,
45+ }, "\n " ), version , buildTime , url ,
46+ )
47+ }
1848
1949func main () {
2050 status := mainExit ()
@@ -28,10 +58,39 @@ func main() {
2858}
2959
3060func mainExit () int {
61+ flag .Usage = PrintUsage
62+
3163 var cfgPath string
64+ var showVersion bool
65+ var showHelp bool
66+ flag .StringVar (& cfgPath , "c" , "config.toml" , "config file location" )
3267 flag .StringVar (& cfgPath , "config" , "config.toml" , "config file location" )
68+ flag .BoolVar (& showVersion , "v" , false , "show version info" )
69+ flag .BoolVar (& showVersion , "version" , false , "show version info" )
70+ flag .BoolVar (& showHelp , "h" , false , "show version info" )
71+ flag .BoolVar (& showHelp , "help" , false , "show version info" )
3372 flag .Parse ()
3473
74+ if showVersion {
75+ if len (buildvar .Version ) == 0 {
76+ fmt .Printf ("unknown\n " )
77+ return 1
78+ }
79+ fmt .Printf ("%s\n " , strings .TrimPrefix (buildvar .Version , "v" ))
80+ return 0
81+ }
82+
83+ if showHelp {
84+ flag .Usage ()
85+ return 0
86+ }
87+
88+ if len (flag .Args ()) > 0 {
89+ fmt .Printf ("unrecognized arguments: %v\n " , strings .Join (flag .Args (), " " ))
90+ flag .Usage ()
91+ return 1
92+ }
93+
3594 start := time .Now ()
3695 log := MakeLogger (frog .New (frog .Auto , frog .HideLevel , frog .MessageOnRight , frog .FieldIndent10 ), "" )
3796 defer func () {
0 commit comments