func()

in oss/lib/sync.go [816:866]


func (sc *SyncCommand) CheckDestBackupDir(sUrl StorageURLer) error {
	// create bacup dir
	createDirectory := false
	f, err := os.Stat(sUrl.ToString())
	if err != nil {
		if err := os.MkdirAll(sUrl.ToString(), 0755); err != nil {
			return err
		}
		createDirectory = true
	} else if !f.IsDir() {
		return fmt.Errorf("dest dir %s is file,is not directory", sUrl.ToString())
	}

	if createDirectory && sc.syncOption.backupDir == "" {
		return nil
	}

	if sc.syncOption.backupDir == "" {
		return fmt.Errorf("dest backup dir is empty string,please use --backup-dir")
	}

	if !strings.HasSuffix(sc.syncOption.backupDir, string(os.PathSeparator)) {
		sc.syncOption.backupDir += string(os.PathSeparator)
	}

	// check backup dir is Subdirectories or not
	absfilePath, errF := sc.GetAbsPath(sUrl.ToString())
	if errF != nil {
		return errF
	}

	absBackPath, errB := sc.GetAbsPath(sc.syncOption.backupDir)
	if errB != nil {
		return errB
	}

	if strings.Index(absBackPath, absfilePath) >= 0 {
		return fmt.Errorf("backup dir %s is subdirectory of %s", sc.syncOption.backupDir, sUrl.ToString())
	}

	// create bacup dir
	f, err = os.Stat(sc.syncOption.backupDir)
	if err != nil {
		if err := os.MkdirAll(sc.syncOption.backupDir, 0755); err != nil {
			return err
		}
	} else if !f.IsDir() {
		return fmt.Errorf("dest backup dir %s is file,is not directory", sc.syncOption.backupDir)
	}
	return nil
}