diff --git a/api/filesystem/filesystem.go b/api/filesystem/filesystem.go index 10579cf67..7e7d10e11 100644 --- a/api/filesystem/filesystem.go +++ b/api/filesystem/filesystem.go @@ -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") } diff --git a/api/portainer.go b/api/portainer.go index e0c311f23..9a958a340 100644 --- a/api/portainer.go +++ b/api/portainer.go @@ -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