fix(filesystem): keep original file copy with SafeCopyDirectory

fix/EE-5980/version-stack-backward-capability
oscarzhou 2023-08-17 11:40:41 +12:00
parent 95424c322d
commit 748c6fa22a
2 changed files with 8 additions and 4 deletions

View File

@ -899,18 +899,22 @@ func FileExists(filePath string) (bool, error) {
}
// SafeCopyDirectory copies a directory from src to dst in a safe way.
func (service *Service) SafeMoveDirectory(originalPath, newPath string) error {
func (service *Service) SafeCopyDirectory(originalPath, newPath string) error {
// 1. Backup the source directory to a different folder
backupDir := fmt.Sprintf("%s-%s", filepath.Dir(originalPath), "backup")
err := MoveDirectory(originalPath, backupDir)
err := CopyDir(originalPath, backupDir, false)
if err != nil {
return fmt.Errorf("failed to backup source directory: %w", err)
}
defer func() {
if err != nil {
restoreErr := os.RemoveAll(originalPath)
if err != nil {
log.Warn().Err(restoreErr).Msg("failed to cleanup original directory")
}
// If an error occurred, rollback the backup directory
restoreErr := restoreBackup(originalPath, backupDir)
restoreErr = restoreBackup(originalPath, backupDir)
if restoreErr != nil {
log.Warn().Err(restoreErr).Msg("failed to restore backup during creating versioning folder")
}

View File

@ -1412,7 +1412,7 @@ type (
GetEdgeStackProjectPathByVersion(edgeStackIdentifier string, version int, commitHash string) string
StoreEdgeStackFileFromBytesByVersion(edgeStackIdentifier, fileName string, version int, data []byte) (string, error)
FormProjectPathByVersion(projectPath string, version int, commitHash string) string
SafeMoveDirectory(src, dst string) error
SafeCopyDirectory(src, dst string) error
StoreRegistryManagementFileFromBytes(folder, fileName string, data []byte) (string, error)
KeyPairFilesExist() (bool, error)
StoreKeyPair(private, public []byte, privatePEMHeader, publicPEMHeader string) error