MCPcopy Create free account
hub / github.com/1Panel-dev/1Panel / stepRestoreComposeFiles

Function stepRestoreComposeFiles

agent/app/service/backup_compose.go:623–685  ·  view source on GitHub ↗
(recoverCtx *composeRecoverContext)

Source from the content-addressed store, hash-verified

621}
622
623func stepRestoreComposeFiles(recoverCtx *composeRecoverContext) error {
624 if recoverCtx.targetDir != "" {
625 _ = os.RemoveAll(recoverCtx.targetDir)
626 }
627 if err := os.MkdirAll(recoverCtx.targetDir, os.ModePerm); err != nil {
628 return err
629 }
630 restored := make([]string, 0, len(recoverCtx.meta.Files))
631 for _, item := range recoverCtx.meta.Files {
632 backupPath, err := safeJoinWithinBase(recoverCtx.tmpDir, item.BackupPath)
633 if err != nil {
634 return fmt.Errorf("invalid compose backup path %q, err: %v", item.BackupPath, err)
635 }
636 if !recoverCtx.fileOp.Stat(backupPath) {
637 continue
638 }
639 targetName := item.FileName
640 if item.RelativePath != "" {
641 targetName = item.RelativePath
642 }
643 if targetName == "" {
644 targetName = path.Base(item.OriginalPath)
645 }
646 if targetName == "" {
647 targetName = "docker-compose.yml"
648 }
649 targetPath, err := safeJoinWithinBase(recoverCtx.targetDir, targetName)
650 if err != nil {
651 return fmt.Errorf("invalid compose target path %q, err: %v", targetName, err)
652 }
653 if err := os.MkdirAll(path.Dir(targetPath), os.ModePerm); err != nil {
654 return err
655 }
656 content, err := os.ReadFile(backupPath)
657 if err != nil {
658 return err
659 }
660 if err := recoverCtx.fileOp.SaveFile(targetPath, string(content), fs.ModePerm); err != nil {
661 return err
662 }
663 restored = append(restored, targetPath)
664 }
665 envPath := path.Join(recoverCtx.tmpDir, "compose_files", ".env")
666 if recoverCtx.fileOp.Stat(envPath) {
667 envContent, err := os.ReadFile(envPath)
668 if err != nil {
669 return err
670 }
671 if err := recoverCtx.fileOp.SaveFile(path.Join(recoverCtx.targetDir, ".env"), string(envContent), fs.ModePerm); err != nil {
672 return err
673 }
674 }
675 if len(restored) == 0 {
676 defaultPath := path.Join(recoverCtx.targetDir, "docker-compose.yml")
677 if !recoverCtx.fileOp.Stat(defaultPath) {
678 return fmt.Errorf("compose file not found in backup data")
679 }
680 restored = append(restored, defaultPath)

Callers 1

handleComposeRecoverFunction · 0.85

Calls 5

safeJoinWithinBaseFunction · 0.85
RemoveAllMethod · 0.80
MkdirAllMethod · 0.80
SaveFileMethod · 0.80
StatMethod · 0.45

Tested by

no test coverage detected