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