in oss/lib/set_meta.go [459:515]
func (sc *SetMetaCommand) checkOptions(cloudURL CloudURL, isUpdate, isDelete, force, recursive bool, language, versionId, objFileXml string) error {
if cloudURL.bucket == "" {
return fmt.Errorf("invalid cloud url: %s, miss bucket", cloudURL.urlStr)
}
if cloudURL.object == "" {
if !recursive && objFileXml == "" {
return fmt.Errorf("set object meta invalid cloud url: %s, object empty. Set bucket meta is not supported, if you mean batch set meta on objects, please use --recursive or --object-file", sc.command.args[0])
}
} else {
if objFileXml != "" {
return fmt.Errorf("the first arg of `ossutil set-meta` only support oss://bucket when set option --object-file")
}
}
var res bool
res, sc.filters = getFilter(os.Args)
if !res {
return fmt.Errorf("--include or --exclude does not support format containing dir info")
}
if !recursive && len(sc.filters) > 0 {
return fmt.Errorf("--include or --exclude only work with --recursive")
}
if (recursive && len(versionId) > 0) || (objFileXml != "" && len(versionId) > 0) {
return fmt.Errorf("--version-id only work on single object")
}
if !force {
var val string
if !recursive && objFileXml == "" {
return nil
}
fmt.Printf("Do you really mean to recursivlly set meta on objects of %s(y or N)? ", sc.command.args[0])
if _, err := fmt.Scanln(&val); err != nil || (strings.ToLower(val) != "yes" && strings.ToLower(val) != "y") {
fmt.Println("operation is canceled.")
return nil
}
}
if isUpdate && isDelete {
return fmt.Errorf("--update option and --delete option are not supported for %s at the same time, please check", sc.command.args[0])
}
if !isUpdate && !isDelete && !force {
if language == LEnglishLanguage {
fmt.Printf("Warning: --update option means update the specified header, --delete option means delete the specified header, miss both options means update the whole meta info, continue to update the whole meta info(y or N)? ")
} else {
fmt.Printf("警告:--update选项更新指定的header,--delete选项删除指定的header,两者同时缺失会更改object的全量meta信息,请确认是否要更改全量meta信息(y or N)? ")
}
var str string
if _, err := fmt.Scanln(&str); err != nil || (strings.ToLower(str) != "yes" && strings.ToLower(str) != "y") {
return fmt.Errorf("operation is canceled")
}
fmt.Println("")
}
return nil
}