gci is configured with the sections standard, default and localmodule, and goimports with the module path as its local prefix, so both formatters agree.
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package migrate
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"git.avsdev.uk/Go/job-search/internal/cli"
|
|
"git.avsdev.uk/Go/job-search/internal/store"
|
|
)
|
|
|
|
// runStepUp applies steps pending migrations (0 means all), printing each one
|
|
// and the resulting version. create says the user already agreed to create a
|
|
// missing database file; otherwise they are asked.
|
|
func runStepUp(
|
|
cmd *cobra.Command, opts *cli.Options, steps int, create bool,
|
|
) (err error) {
|
|
m, db, err := openMigrator(cmd, opts, true, create)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer closeDB(db, &err)
|
|
|
|
results, err := store.StepUp(cmd.Context(), m, int(steps))
|
|
|
|
if len(results) == 0 && err == nil {
|
|
_, err := fmt.Fprintln(cmd.OutOrStdout(), "No changes made to database (up-to-date)")
|
|
return err
|
|
}
|
|
|
|
if err := printResults(cmd.OutOrStdout(), results); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err != nil {
|
|
return failure(cmd.OutOrStdout(), err)
|
|
}
|
|
|
|
return printVersion(cmd.Context(), cmd.OutOrStdout(), m)
|
|
}
|
|
|
|
func commandUp(opts *cli.Options) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "up",
|
|
Short: "Migrate SQLite database to the latest version, or by a number of steps",
|
|
Args: cobra.NoArgs,
|
|
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
|
slog.Debug("migrate.up.PersistentPreRun")
|
|
},
|
|
PersistentPostRun: func(cmd *cobra.Command, args []string) {
|
|
slog.Debug("migrate.up.PersistentPostRun")
|
|
},
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
slog.Debug("migrate.up.Run")
|
|
|
|
steps, _ := cmd.Flags().GetUint("steps")
|
|
create, _ := cmd.Flags().GetBool("create")
|
|
|
|
return runStepUp(cmd, opts, int(steps), create)
|
|
},
|
|
}
|
|
cmd.Flags().Uint(
|
|
"steps",
|
|
0,
|
|
"number of migrations to apply. 0 = all pending",
|
|
)
|
|
cmd.Flags().Bool(
|
|
"create",
|
|
false,
|
|
"create the database file if it does not already exist",
|
|
)
|
|
return cmd
|
|
}
|