( dir string, env map[string]string, stdout, stderr io.Writer, cmd string, args ...string, )
| 379 | } |
| 380 | |
| 381 | func execFrom( |
| 382 | dir string, env map[string]string, stdout, stderr io.Writer, cmd string, args ...string, |
| 383 | ) error { |
| 384 | c := exec.Command(cmd, args...) |
| 385 | c.Env = os.Environ() |
| 386 | for k, v := range env { |
| 387 | c.Env = append(c.Env, k+"="+v) |
| 388 | } |
| 389 | c.Dir = dir |
| 390 | c.Stderr = stderr |
| 391 | c.Stdout = stdout |
| 392 | c.Stdin = os.Stdin |
| 393 | if mg.Verbose() { |
| 394 | log.Println("exec:", cmd, strings.Join(args, " ")) |
| 395 | } |
| 396 | err := c.Run() |
| 397 | if err == nil { |
| 398 | return nil |
| 399 | } |
| 400 | ran, code := sh.CmdRan(err), sh.ExitStatus(err) |
| 401 | if ran { |
| 402 | return mg.Fatalf(code, `running "%s %s" failed with exit code %d`, cmd, strings.Join(args, " "), code) |
| 403 | } |
| 404 | return fmt.Errorf(`failed to run "%s %s: %w"`, cmd, strings.Join(args, " "), err) |
| 405 | } |
no test coverage detected