mirror of https://github.com/portainer/portainer
fix(filesystem): keep original file copy with SafeCopyDirectory
parent
95424c322d
commit
748c6fa22a
|
@ -899,18 +899,22 @@ func FileExists(filePath string) (bool, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SafeCopyDirectory copies a directory from src to dst in a safe way.
|
// 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
|
// 1. Backup the source directory to a different folder
|
||||||
backupDir := fmt.Sprintf("%s-%s", filepath.Dir(originalPath), "backup")
|
backupDir := fmt.Sprintf("%s-%s", filepath.Dir(originalPath), "backup")
|
||||||
err := MoveDirectory(originalPath, backupDir)
|
err := CopyDir(originalPath, backupDir, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to backup source directory: %w", err)
|
return fmt.Errorf("failed to backup source directory: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
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
|
// If an error occurred, rollback the backup directory
|
||||||
restoreErr := restoreBackup(originalPath, backupDir)
|
restoreErr = restoreBackup(originalPath, backupDir)
|
||||||
if restoreErr != nil {
|
if restoreErr != nil {
|
||||||
log.Warn().Err(restoreErr).Msg("failed to restore backup during creating versioning folder")
|
log.Warn().Err(restoreErr).Msg("failed to restore backup during creating versioning folder")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1412,7 +1412,7 @@ type (
|
||||||
GetEdgeStackProjectPathByVersion(edgeStackIdentifier string, version int, commitHash string) string
|
GetEdgeStackProjectPathByVersion(edgeStackIdentifier string, version int, commitHash string) string
|
||||||
StoreEdgeStackFileFromBytesByVersion(edgeStackIdentifier, fileName string, version int, data []byte) (string, error)
|
StoreEdgeStackFileFromBytesByVersion(edgeStackIdentifier, fileName string, version int, data []byte) (string, error)
|
||||||
FormProjectPathByVersion(projectPath string, version int, commitHash string) string
|
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)
|
StoreRegistryManagementFileFromBytes(folder, fileName string, data []byte) (string, error)
|
||||||
KeyPairFilesExist() (bool, error)
|
KeyPairFilesExist() (bool, error)
|
||||||
StoreKeyPair(private, public []byte, privatePEMHeader, publicPEMHeader string) error
|
StoreKeyPair(private, public []byte, privatePEMHeader, publicPEMHeader string) error
|
||||||
|
|
Loading…
Reference in New Issue