package main import ( "fmt" "gogs.inhome.blapointe.com/local/args" "gogs.inhome.blapointe.com/local/storage" "gogs.inhome.blapointe.com/local/storage/resolve" "log" ) type Config struct { DBs [2]storage.DB NSs [2]string Dry bool args *args.ArgSet } func (config Config) String() string { return fmt.Sprintf( "{1:%T 1NS:%s 2:%T 2NS:%s Dry:%v}", config.DBs[0], config.NSs[0], config.DBs[1], config.NSs[1], config.Dry, ) } func main() { c := config() resolve.DefaultNamespace = "" keys, err := c.DBs[0].List([]string{c.NSs[0]}) if err != nil { panic(err) } log.Println(c) for _, key := range keys { v, err := c.DBs[0].Get(key, c.NSs[0]) if err != nil { panic(err) } if c.Dry { log.Printf("%T@%s Set(%s, %s, %s)", c.DBs[1], c.args.GetString("2addr"), key, v, c.NSs[1]) } else if err := c.DBs[1].Set(key, v, c.NSs[1]); err != nil { panic(err) } } } func config() Config { as := args.NewArgSet() for i := range [2]int{} { s := fmt.Sprint(i + 1) as.Append(args.STRING, s+"usr", s+"'s user", "") as.Append(args.STRING, s+"pwd", s+"'s password", "") as.Append(args.STRING, s+"addr", s+"'s addr", "") as.Append(args.STRING, s+"type", s+"'s type", "") as.Append(args.STRING, s+"ns", s+"'s namespace", resolve.DefaultNamespace) } as.Append(args.BOOL, "dry", "dry run", false) if err := as.Parse(); err != nil { panic(err) } stores := [2]storage.DB{} for i := range stores { var err error stores[i], err = storage.New( storage.TypeFromString(as.GetString(fmt.Sprint(i+1)+"type")), as.GetString(fmt.Sprint(i+1)+"addr"), as.GetString(fmt.Sprint(i+1)+"usr"), as.GetString(fmt.Sprint(i+1)+"pwd"), ) if err != nil { panic(err) } } return Config{ DBs: stores, Dry: as.GetBool("dry"), NSs: [2]string{as.GetString("1ns"), as.GetString("2ns")}, args: as, } }