github.com/CloudCom/goose@v0.0.0-20151110184009-e03c3249c21b/cmd/goose/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 "strings" 8 "text/template" 9 10 "github.com/CloudCom/goose/lib/goose" 11 ) 12 13 // global options. available to any subcommands. 14 var flagPath = flag.String("path", "db", "folder containing db info") 15 var flagEnv = flag.String("env", "development", "which DB environment to use") 16 17 var drivers []string 18 19 // helper to create a DBConf from the given flags 20 func dbConfFromFlags() (dbconf *goose.DBConf, err error) { 21 return goose.NewDBConf(*flagPath, *flagEnv) 22 } 23 24 var commands = []*Command{ 25 upCmd, 26 downCmd, 27 redoCmd, 28 statusCmd, 29 createCmd, 30 dbVersionCmd, 31 driversCmd, 32 } 33 34 func main() { 35 os.Exit(imain()) 36 } 37 func imain() int { 38 flag.Usage = usage 39 flag.Parse() 40 41 args := flag.Args() 42 if len(args) == 0 || args[0] == "-h" { 43 flag.Usage() 44 return 0 45 } 46 47 var cmd *Command 48 name := args[0] 49 for _, c := range commands { 50 if strings.HasPrefix(c.Name, name) { 51 cmd = c 52 break 53 } 54 } 55 56 if cmd == nil { 57 fmt.Printf("error: unknown command %q\n", name) 58 flag.Usage() 59 return 1 60 } 61 62 cmd.Exec(args[1:]) 63 return 0 64 } 65 66 func usage() { 67 fmt.Print(usagePrefix) 68 flag.PrintDefaults() 69 usageTmpl.Execute(os.Stdout, commands) 70 } 71 72 var usagePrefix = ` 73 goose is a database migration management system for Go projects. 74 75 Usage: 76 goose [options] <subcommand> [subcommand options] 77 78 Options: 79 ` 80 var usageTmpl = template.Must(template.New("usage").Parse( 81 ` 82 Commands:{{range .}} 83 {{.Name | printf "%-10s"}} {{.Summary}}{{end}} 84 `))