54 lines
1.4 KiB
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
|
|
}
|