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

Method DeCompress

agent/app/service/file.go:503–551  ·  view source on GitHub ↗
(c request.FileDeCompress)

Source from the content-addressed store, hash-verified

501}
502
503func (f *FileService) DeCompress(c request.FileDeCompress) error {
504 fo := files.NewFileOp()
505 if c.Type == "tar" && len(c.Secret) != 0 {
506 c.Type = "tar.gz"
507 }
508 if err := preflightDecompressTool(files.CompressType(c.Type)); err != nil {
509 return err
510 }
511 taskItem, err := task.NewTask(c.Path, task.TaskExec, task.TaskScopeTask, c.TaskID, 1)
512 if err != nil {
513 return err
514 }
515 go func() {
516 taskItem.AddSubTask(c.Path, func(t *task.Task) error {
517 t.LogStart(c.Path)
518 dstExisted := fo.Stat(c.Dst)
519 parentDir := filepath.Dir(c.Dst)
520 if !fo.Stat(parentDir) {
521 if err := fo.CreateDir(parentDir, constant.DirPerm); err != nil {
522 return err
523 }
524 }
525 tempDst, err := os.MkdirTemp(parentDir, ".decompress-*")
526 if err != nil {
527 return err
528 }
529 success := false
530 defer func() {
531 _ = os.RemoveAll(tempDst)
532 if !success && !dstExisted {
533 _ = os.RemoveAll(c.Dst)
534 }
535 }()
536 if err := fo.Decompress(t.TaskCtx, c.Path, tempDst, files.CompressType(c.Type), c.Secret); err != nil {
537 return err
538 }
539 if err := fo.CreateDir(c.Dst, constant.DirPerm); err != nil {
540 return err
541 }
542 if err := copyDecompressTree(t.TaskCtx, tempDst, c.Dst); err != nil {
543 return err
544 }
545 success = true
546 return nil
547 }, nil)
548 _ = taskItem.Execute()
549 }()
550 return nil
551}
552
553func copyDecompressTree(ctx context.Context, srcDir, dstDir string) error {
554 entries, err := os.ReadDir(srcDir)

Callers

nothing calls this directly

Calls 9

AddSubTaskMethod · 0.95
StatMethod · 0.95
CreateDirMethod · 0.95
DecompressMethod · 0.95
ExecuteMethod · 0.95
preflightDecompressToolFunction · 0.85
copyDecompressTreeFunction · 0.85
RemoveAllMethod · 0.80
LogStartMethod · 0.45

Tested by

no test coverage detected