in oss/lib/set_meta.go [390:457]
func (sc *SetMetaCommand) RunCommand() error {
sc.monitor.init("Setted meta on")
isUpdate, _ := GetBool(OptionUpdate, sc.command.options)
isDelete, _ := GetBool(OptionDelete, sc.command.options)
recursive, _ := GetBool(OptionRecursion, sc.command.options)
force, _ := GetBool(OptionForce, sc.command.options)
routines, _ := GetInt(OptionRoutines, sc.command.options)
language, _ := GetString(OptionLanguage, sc.command.options)
language = strings.ToLower(language)
encodingType, _ := GetString(OptionEncodingType, sc.command.options)
versionId, _ := GetString(OptionVersionId, sc.command.options)
objFileXml, _ := GetString(OptionObjectFile, sc.command.options)
snapshotPath, _ := GetString(OptionSnapshotPath, sc.command.options)
var err error
// load snapshot
sc.smOption.snapshotPath = snapshotPath
if sc.smOption.snapshotPath != "" {
if sc.smOption.snapshotldb, err = leveldb.OpenFile(sc.smOption.snapshotPath, nil); err != nil {
return fmt.Errorf("load snapshot error, reason: %s", err.Error())
}
defer sc.smOption.snapshotldb.Close()
}
cloudURL, err := CloudURLFromString(sc.command.args[0], encodingType)
if err != nil {
return err
}
if err := sc.checkOptions(cloudURL, isUpdate, isDelete, force, recursive, language, versionId, objFileXml); err != nil {
return err
}
bucket, err := sc.command.ossBucket(cloudURL.bucket)
if err != nil {
return err
}
str, err := sc.getMetaData(force, language)
if err != nil {
return err
}
headers, err := sc.command.parseHeaders(str, isDelete)
if err != nil {
return err
}
sc.smOption.ctnu = true
// check --object-file mode
if objFileXml != "" {
// check objFileXml and parse it
if err := sc.checkObjectFile(objFileXml); err != nil {
return err
}
recursive = true
err = sc.batchSetObjectsMetaFromFile(bucket, cloudURL, headers, isUpdate, isDelete, recursive, routines)
} else {
if !recursive {
err = sc.setObjectMeta(bucket, cloudURL.object, headers, isUpdate, isDelete, false, versionId)
} else {
err = sc.batchSetObjectMeta(bucket, cloudURL, headers, isUpdate, isDelete, force, routines)
}
}
if isUpdate {
LogInfo("update skip count:%d\n", sc.skipCount)
}
return err
}