intake/cmd/migrate.go

55 lines
1.1 KiB
Go

package cmd
import (
"fmt"
"log"
"github.com/Jaculabilis/intake/core"
_ "github.com/mattn/go-sqlite3"
"github.com/spf13/cobra"
)
var migrateCmd = &cobra.Command{
Use: "migrate",
Short: "Migrate an intake database to the latest version",
Long: `Migrate an intake database to the latest version.
Note that the database will be created if it does not exist, even with --list.`,
Run: func(cmd *cobra.Command, args []string) {
migrate(boolArg(cmd, "list"))
},
}
func init() {
rootCmd.AddCommand(migrateCmd)
migrateCmd.Flags().BoolP("list", "l", false, "Show the list of migrations")
}
func migrate(listOnly bool) {
db := openDb()
err := core.InitDatabase(db)
if err != nil {
log.Fatalf("error: failed to init database: %v", err)
}
if listOnly {
pending, err := core.GetPendingMigrations(db)
if err != nil {
log.Fatal(err)
}
for name, complete := range pending {
if complete {
fmt.Printf("[x] %s\n", name)
} else {
fmt.Printf("[ ] %s\n", name)
}
}
} else {
err = core.MigrateDatabase(db)
if err != nil {
log.Fatalf("error: failed to migrate database: %v", err)
}
}
}