mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/1Panel-dev/1Panel.git
synced 2026-09-20 08:03:55 +08:00
fix: resolve snapshot extraction directory missing issue (#13104)
This commit is contained in:
@@ -2,6 +2,7 @@ package cmd
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
@@ -67,3 +68,41 @@ func Which(name string) bool {
|
||||
_, err := exec.LookPath(name)
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func commandStartDiagnostics(name, resolvedName, workDir string, env []string) string {
|
||||
items := []string{
|
||||
fmt.Sprintf("command=%q", name),
|
||||
fmt.Sprintf("resolved=%q", resolvedName),
|
||||
fmt.Sprintf("path=%q", envValue(env, "PATH")),
|
||||
}
|
||||
if workDir != "" {
|
||||
items = append(items, describeWorkDir(workDir))
|
||||
}
|
||||
return "; " + strings.Join(items, "; ")
|
||||
}
|
||||
|
||||
func describeWorkDir(name string) string {
|
||||
statText := "stat=ok"
|
||||
if info, err := os.Stat(name); err != nil {
|
||||
statText = fmt.Sprintf("stat=%v", err)
|
||||
} else {
|
||||
statText = fmt.Sprintf("stat=mode:%s", info.Mode().String())
|
||||
}
|
||||
lstatText := "lstat=ok"
|
||||
if info, err := os.Lstat(name); err != nil {
|
||||
lstatText = fmt.Sprintf("lstat=%v", err)
|
||||
} else {
|
||||
lstatText = fmt.Sprintf("lstat=mode:%s", info.Mode().String())
|
||||
}
|
||||
return fmt.Sprintf("workdir=%q[%s %s]", name, statText, lstatText)
|
||||
}
|
||||
|
||||
func envValue(env []string, key string) string {
|
||||
prefix := key + "="
|
||||
for i := len(env) - 1; i >= 0; i-- {
|
||||
if strings.HasPrefix(env[i], prefix) {
|
||||
return strings.TrimPrefix(env[i], prefix)
|
||||
}
|
||||
}
|
||||
return os.Getenv(key)
|
||||
}
|
||||
|
||||
@@ -274,7 +274,10 @@ func startPipeCommands(cmds []*exec.Cmd) error {
|
||||
for i := len(cmds) - 1; i >= 0; i-- {
|
||||
if err := cmds[i].Start(); err != nil {
|
||||
killStarted(cmds[i+1:])
|
||||
return err
|
||||
if os.IsNotExist(err) {
|
||||
return fmt.Errorf("cmd start failed: %w%s", err, commandStartDiagnostics(cmds[i].Args[0], cmds[i].Path, cmds[i].Dir, cmds[i].Env))
|
||||
}
|
||||
return fmt.Errorf("cmd start failed: %w", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
@@ -376,6 +379,9 @@ func (c *CommandHelper) run(name string, arg ...string) (string, error) {
|
||||
}()
|
||||
|
||||
if err := cmd.Start(); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
return "", fmt.Errorf("cmd start failed: %w%s", err, commandStartDiagnostics(cmd.Args[0], cmd.Path, cmd.Dir, cmd.Env))
|
||||
}
|
||||
return "", fmt.Errorf("cmd start failed: %w", err)
|
||||
}
|
||||
if c.taskItem != nil {
|
||||
|
||||
@@ -1376,8 +1376,8 @@ func (f FileOp) TarGzFilesWithCompressPro(list []string, dst, secret string) err
|
||||
}
|
||||
|
||||
func (f FileOp) TarGzExtractPro(src, dst string, secret string) error {
|
||||
if _, err := os.Stat(path.Dir(dst)); err != nil && os.IsNotExist(err) {
|
||||
if err = os.MkdirAll(path.Dir(dst), os.ModePerm); err != nil {
|
||||
if _, err := os.Stat(dst); err != nil && os.IsNotExist(err) {
|
||||
if err = os.MkdirAll(dst, os.ModePerm); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user