func()

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
}