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}