func main() { flag.Parse() if *flagSrc == "" { usage("No --src specified.") } if *flagDest == "" { usage("No --dest specified.") } if *flagLoop && !*flagRemoveSource { usage("Can't use --loop without --removesrc") } sc := client.New(*flagSrc, *flagSrcPass) dc := client.New(*flagDest, *flagDestPass) var logger *log.Logger = nil if *flagVerbose { logger = log.New(os.Stderr, "", 0) } sc.SetLogger(logger) dc.SetLogger(logger) passNum := 0 for { passNum++ stats, err := doPass(sc, dc, passNum) if err != nil { log.Fatalf("sync failed: %v", err) } if *flagVerbose { log.Printf("sync stats - pass: %d, blobs: %d, bytes %d\n", passNum, stats.BlobsCopied, stats.BytesCopied) } if !*flagLoop { break } } }
func newFromConfig(_ blobserver.Loader, config jsonconfig.Obj) (storage blobserver.Storage, err os.Error) { url := config.RequiredString("url") password := config.RequiredString("password") skipStartupCheck := config.OptionalBool("skipStartupCheck", false) if err := config.Validate(); err != nil { return nil, err } sto := &remoteStorage{ client: client.New(url, password), } if !skipStartupCheck { // TODO: do a server stat or something to check password } return sto, nil }