fix: resolve snapshot extraction directory missing issue (#13104)

This commit is contained in:
ssongliu
2026-06-24 18:23:37 +08:00
committed by GitHub
parent f67e1d897c
commit 86aa6c09c6
3 changed files with 48 additions and 3 deletions

View File

@@ -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)
}

View File

@@ -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 {

View File

@@ -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
}
}