in oss/lib/restore.go [260:324]
func (rc *RestoreCommand) RunCommand() error {
rc.monitor.init("Restore")
encodingType, _ := GetString(OptionEncodingType, rc.command.options)
recursive, _ := GetBool(OptionRecursion, rc.command.options)
versionid, _ := GetString(OptionVersionId, rc.command.options)
force, _ := GetBool(OptionForce, rc.command.options)
objFileXml, _ := GetString(OptionObjectFile, rc.command.options)
snapshotPath, _ := GetString(OptionSnapshotPath, rc.command.options)
payer, _ := GetString(OptionRequestPayer, rc.command.options)
if payer != "" {
if payer != strings.ToLower(string(oss.Requester)) {
return fmt.Errorf("invalid request payer: %s, please check", payer)
}
rc.commonOptions = append(rc.commonOptions, oss.RequestPayer(oss.PayerType(payer)))
}
var err error
// load snapshot
rc.reOption.snapshotPath = snapshotPath
if rc.reOption.snapshotPath != "" {
if rc.reOption.snapshotldb, err = leveldb.OpenFile(rc.reOption.snapshotPath, nil); err != nil {
return fmt.Errorf("load snapshot error, reason: %s", err.Error())
}
defer rc.reOption.snapshotldb.Close()
}
cloudURL, err := CloudURLFromString(rc.command.args[0], encodingType)
if err != nil {
return err
}
if err = rc.checkOptions(cloudURL, recursive, force, versionid, objFileXml); err != nil {
return err
}
bucket, err := rc.command.ossBucket(cloudURL.bucket)
if err != nil {
return err
}
// parse restore config
if len(rc.command.args) > 1 {
restoreConf := rc.command.args[1]
err := rc.parseRestoreConf(restoreConf)
if err != nil {
return err
}
} else {
rc.hasConfig = false
}
if objFileXml != "" {
// check objFileXml and parse it
if err := rc.checkObjectFile(objFileXml); err != nil {
return err
}
recursive = true
return rc.batchRestoreObjects(bucket, cloudURL, recursive)
} else {
if !recursive {
return rc.ossRestoreObject(bucket, cloudURL.object, versionid, false)
}
return rc.batchRestoreObjects(bucket, cloudURL, recursive)
}
}