git-bug.go

 1package main
 2
 3import (
 4	"fmt"
 5	"os"
 6	"sort"
 7	"strings"
 8	"github.com/MichaelMure/git-bug/repository"
 9	"github.com/MichaelMure/git-bug/commands"
10)
11
12const usageMessageTemplate = `Usage: %s <command>
13
14Where <command> is one of:
15  %s
16
17For individual command usage, run:
18  %s help <command>
19`
20
21func usage() {
22	command := os.Args[0]
23	var subcommands []string
24	for subcommand := range commands.CommandMap {
25		subcommands = append(subcommands, subcommand)
26	}
27	sort.Strings(subcommands)
28	fmt.Printf(usageMessageTemplate, command, strings.Join(subcommands, "\n  "), command)
29}
30
31func help() {
32	if len(os.Args) < 3 {
33		usage()
34		return
35	}
36	subcommand, ok := commands.CommandMap[os.Args[2]]
37	if !ok {
38		fmt.Printf("Unknown command %q\n", os.Args[2])
39		usage()
40		return
41	}
42	subcommand.Usage(os.Args[0])
43}
44
45func main() {
46	if len(os.Args) > 1 && os.Args[1] == "help" {
47		help()
48		return
49	}
50	cwd, err := os.Getwd()
51	if err != nil {
52		fmt.Printf("Unable to get the current working directory: %q\n", err)
53		return
54	}
55	repo, err := repository.NewGitRepo(cwd)
56	if err != nil {
57		fmt.Printf("%s must be run from within a git repo.\n", os.Args[0])
58		return
59	}
60	if len(os.Args) < 2 {
61		// default behavior
62		fmt.Println("Not implemented")
63		return
64	}
65	subcommand, ok := commands.CommandMap[os.Args[1]]
66	if !ok {
67		fmt.Printf("Unknown command: %q\n", os.Args[1])
68		usage()
69		return
70	}
71	if err := subcommand.Run(repo, os.Args[2:]); err != nil {
72		fmt.Println(err.Error())
73		os.Exit(1)
74	}
75}