From 2aeb435167441c8fd808800e7f26d203ea9c0dbc Mon Sep 17 00:00:00 2001 From: Andrew Woodlee Date: Tue, 15 Oct 2024 08:49:13 -0500 Subject: [PATCH] new commands.[name].type: script; update templates --- pkg/backy/backy.go | 59 +++++++++++++++++++++++++++------ pkg/backy/templates/error.txt | 2 +- pkg/backy/templates/success.txt | 2 +- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/pkg/backy/backy.go b/pkg/backy/backy.go index e6748e7..6a149b4 100644 --- a/pkg/backy/backy.go +++ b/pkg/backy/backy.go @@ -100,15 +100,61 @@ func (command *Command) RunCmd(cmdCtxLogger zerolog.Logger, opts *ConfigOpts) ([ // Is command type defined. That is, is it local or not if command.Type != "" { + var ( + script *bytes.Buffer + buffer bytes.Buffer + scriptEnvFileBuffer bytes.Buffer + scriptFileBuffer bytes.Buffer + dirErr error + scriptEnvFilePresent bool + ) + defer func() { // did the program panic while writing to the buffer? if err := recover(); err != nil { - cmdCtxLogger.Info().Msg(fmt.Sprintf("panic occurred writing to buffer: %x", err)) + // cmdCtxLogger.Debug().Msg(fmt.Sprintf("script buffer: %v", script)) + cmdCtxLogger.Info().Msg(fmt.Sprintf("panic occurred writing to buffer: %v", err)) } }() if command.Type == "script" { - script := bytes.NewBufferString(cmd + "\n") + + if command.ScriptEnvFile != "" { + + command.ScriptEnvFile, dirErr = resolveDir(command.ScriptEnvFile) + if dirErr != nil { + return nil, dirErr + } + file, err := os.Open(command.ScriptEnvFile) + if err != nil { + return nil, err + } + defer file.Close() + _, err = io.Copy(&scriptEnvFileBuffer, file) + if err != nil { + return nil, err + } + + // Bug: writing to buffer triggers panic + // why? + // use bytes.Buffer instead of pointer to memory (*bytes.Buffer) + + _, err = buffer.WriteString(scriptEnvFileBuffer.String()) + if err != nil { + return nil, err + } + // write newline + buffer.WriteByte(0x0A) + + _, err = buffer.WriteString(cmd) + if err != nil { + return nil, err + } + script = &buffer + + } else { + script = bytes.NewBufferString(cmd + "\n") + } commandSession.Stdin = script if err := commandSession.Shell(); err != nil { @@ -144,15 +190,8 @@ func (command *Command) RunCmd(cmdCtxLogger zerolog.Logger, opts *ConfigOpts) ([ if command.Type == "scriptFile" { - var ( - buffer bytes.Buffer - scriptEnvFileBuffer bytes.Buffer - scriptFileBuffer bytes.Buffer - dirErr error - scriptEnvFilePresent bool - ) - if command.ScriptEnvFile != "" { + command.ScriptEnvFile, dirErr = resolveDir(command.ScriptEnvFile) if dirErr != nil { return nil, dirErr diff --git a/pkg/backy/templates/error.txt b/pkg/backy/templates/error.txt index 026f2a5..a788b7c 100644 --- a/pkg/backy/templates/error.txt +++ b/pkg/backy/templates/error.txt @@ -15,7 +15,7 @@ The following commands ran: {{end}} {{ end }} -{{ if .CmdOutput }}{{- range .CmdOutput }}Commad output for {{ .CmdName }}: +{{ if .CmdOutput }}{{- range .CmdOutput }}Command output for {{ .CmdName }}: {{- range .Output}} {{ . }} {{ end }}{{ end }} diff --git a/pkg/backy/templates/success.txt b/pkg/backy/templates/success.txt index 4d5731b..262d411 100644 --- a/pkg/backy/templates/success.txt +++ b/pkg/backy/templates/success.txt @@ -5,7 +5,7 @@ The following commands ran: - {{. -}} {{end}} -{{ if .CmdOutput }}{{- range .CmdOutput }}Commad output for {{ .CmdName }}: +{{ if .CmdOutput }}{{- range .CmdOutput }}Command output for {{ .CmdName }}: {{- range .Output}} {{ . }} {{ end }}{{ end }}