Files
tidb/br/pkg/task/operator/list_migration.go

54 lines
1.4 KiB
Go

package operator
import (
"context"
"encoding/json"
"fmt"
"os"
"github.com/fatih/color"
"github.com/pingcap/tidb/br/pkg/glue"
"github.com/pingcap/tidb/br/pkg/stream"
"github.com/pingcap/tidb/pkg/objstore"
)
// statusOK make a string like <green>●</green> <bold>{message}</bold>
func statusOK(message string) string {
return color.GreenString("●") + color.New(color.Bold).Sprintf(" %s", message)
}
func RunListMigrations(ctx context.Context, cfg ListMigrationConfig) error {
backend, err := objstore.ParseBackend(cfg.StorageURI, &cfg.BackendOptions)
if err != nil {
return err
}
st, err := objstore.Create(ctx, backend, false)
if err != nil {
return err
}
ext := stream.MigrationExtension(st)
migs, err := ext.Load(ctx, stream.MLNotFoundIsErr())
if err != nil {
return err
}
if cfg.JSONOutput {
if err := json.NewEncoder(os.Stdout).Encode(migs); err != nil {
return err
}
} else {
console := glue.ConsoleOperations{ConsoleGlue: glue.StdIOGlue{}}
console.Println(statusOK(fmt.Sprintf("Total %d Migrations.", len(migs.Layers)+1)))
console.Printf("> BASE <\n")
tbl := console.CreateTable()
ext.AddMigrationToTable(ctx, migs.Base, tbl)
tbl.Print()
for _, t := range migs.Layers {
console.Printf("> %08d <\n", t.SeqNum)
tbl := console.CreateTable()
ext.AddMigrationToTable(ctx, &t.Content, tbl)
tbl.Print()
}
}
return nil
}