cmd.SysProcAttr = &syscall.SysProcAttr{
Setpgid: true,
}
+
cmd.Cancel = func() error {
return syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
}
+
cmd.WaitDelay = toolShellOutputTimeout
output := &ToolHeadTail{}
return output.String(), nil
}
-// write replaces the file at path with text, and makes its missing
-// directories.
+// write replaces the file at path with text, and makes its missing directories.
func (b *Toolbox) write(path, text string) (string, error) {
path = b.path(path)
err := os.MkdirAll(filepath.Dir(path), 0o755)
return fmt.Sprintf("wrote %d bytes to %s", len(text), path), nil
}
-// edit replaces the one occurrence of old in the file at path with
-// replacement. It keeps the mode of the file.
+// edit replaces the one occurrence of old in the file at path with replacement.
+// It keeps the mode of the file.
func (b *Toolbox) edit(path, old, replacement string) (string, error) {
path = b.path(path)
data, err := os.ReadFile(path)
return "edited " + path, nil
}
-// path returns path, relative to the working directory when it is not
-// absolute.
+// path returns path, relative to the working directory when it is not absolute.
func (b *Toolbox) path(path string) string {
if filepath.IsAbs(path) {
return path