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  `))