package main import ( "flag" "strings" "github.com/rubenv/sql-migrate" ) type DownCommand struct { } func (c *DownCommand) Help() string { helpText := ` Usage: sql-migrate down [options] ... Undo a database migration. Options: -config=dbconfig.yml Configuration file to use. -env="development" Environment. -limit=1 Limit the number of migrations (0 = unlimited). -dryrun Don't apply migrations, just print them. ` return strings.TrimSpace(helpText) } func (c *DownCommand) Synopsis() string { return "Undo a database migration" } func (c *DownCommand) Run(args []string) int { var limit int var dryrun bool cmdFlags := flag.NewFlagSet("down", flag.ContinueOnError) cmdFlags.Usage = func() { ui.Output(c.Help()) } cmdFlags.IntVar(&limit, "limit", 1, "Max number of migrations to apply.") cmdFlags.BoolVar(&dryrun, "dryrun", false, "Don't apply migrations, just print them.") ConfigFlags(cmdFlags) if err := cmdFlags.Parse(args); err != nil { return 1 } err := ApplyMigrations(migrate.Down, dryrun, limit) if err != nil { ui.Error(err.Error()) return 1 } return 0 }