in oss/lib/cp.go [1564:1597]
func (cc *CopyCommand) checkCopyArgs(srcURLList []StorageURLer, destURL StorageURLer, opType operationType) error {
for _, url := range srcURLList {
if url.IsCloudURL() && url.(CloudURL).bucket == "" {
return fmt.Errorf("invalid cloud url: %s, miss bucket", url.ToString())
}
}
if destURL.IsCloudURL() && destURL.(CloudURL).bucket == "" {
return fmt.Errorf("invalid cloud url: %s, miss bucket", destURL.ToString())
}
switch opType {
case operationTypePut:
if destURL.IsFileURL() {
return fmt.Errorf("copy files between local file system is not allowed in ossutil, if you want to upload to oss, please make sure dest_url starts with \"%s\",dest_url:%s", SchemePrefix, destURL.ToString())
}
for _, url := range srcURLList {
if url.IsCloudURL() {
return fmt.Errorf("invalid url: %s, copy between oss operation appear in upload operation, multi-type operations is not supported in one command", url.ToString())
}
}
if len(srcURLList) > 1 {
return fmt.Errorf("invalid url: %s, multiple source url in upload operation", srcURLList[1].ToString())
}
case operationTypeGet:
if len(srcURLList) > 1 {
return fmt.Errorf("invalid url: %s, multiple source url in download operation", srcURLList[1].ToString())
}
default:
if len(srcURLList) > 1 {
return fmt.Errorf("invalid url: %s, multiple source url in copy operation", srcURLList[1].ToString())
}
}
return nil
}