From c5022dc026698c909338ffeb7220f4898539398f Mon Sep 17 00:00:00 2001 From: Peter Novotnak Date: Wed, 24 Feb 2021 11:31:45 -0800 Subject: [PATCH 1/3] add jiraExec template function --- jiracli/templates.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/jiracli/templates.go b/jiracli/templates.go index 39ae6cb5..a176e042 100644 --- a/jiracli/templates.go +++ b/jiracli/templates.go @@ -7,6 +7,7 @@ import ( "io" "io/ioutil" "os" + "os/exec" "path/filepath" "reflect" "regexp" @@ -14,15 +15,15 @@ import ( "strings" "text/template" - yaml "gopkg.in/coryb/yaml.v2" + "golang.org/x/crypto/ssh/terminal" "github.com/Masterminds/sprig" "github.com/coryb/figtree" shellquote "github.com/kballard/go-shellquote" "github.com/mgutz/ansi" - "github.com/olekukonko/tablewriter" wordwrap "github.com/mitchellh/go-wordwrap" - "golang.org/x/crypto/ssh/terminal" + "github.com/olekukonko/tablewriter" + yaml "gopkg.in/coryb/yaml.v2" ) func findTemplate(name string) ([]byte, error) { @@ -71,6 +72,17 @@ func TemplateProcessor() *template.Template { "jira": func() string { return os.Args[0] }, + "jiraExec": func(args ...string) *exec.Cmd { + var outb, errb bytes.Buffer + cmd := exec.Command(os.Args[0], args...) + cmd.Stdout = &outb + cmd.Stderr = &errb + err := cmd.Run() + if err != nil { + log.Warning("error running %v: %v", cmd.Args, err) + } + return cmd + }, "env": func() map[string]string { out := map[string]string{} for _, env := range os.Environ() { From 5cc9319bff0508e25205e07b31b449cbfddba4ee Mon Sep 17 00:00:00 2001 From: Peter Novotnak Date: Mon, 1 Mar 2021 11:07:20 -0800 Subject: [PATCH 2/3] strings->interfaces w/conversion --- jiracli/templates.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/jiracli/templates.go b/jiracli/templates.go index a176e042..5041bf53 100644 --- a/jiracli/templates.go +++ b/jiracli/templates.go @@ -72,9 +72,13 @@ func TemplateProcessor() *template.Template { "jira": func() string { return os.Args[0] }, - "jiraExec": func(args ...string) *exec.Cmd { + "jiraExec": func(args ...interface{}) *exec.Cmd { var outb, errb bytes.Buffer - cmd := exec.Command(os.Args[0], args...) + var argStrings []string = make([]string, len(args)) + for i, d := range args { + argStrings[i] = fmt.Sprint(d) + } + cmd := exec.Command(os.Args[0], argStrings...) cmd.Stdout = &outb cmd.Stderr = &errb err := cmd.Run() From c3140f571790182c87b57f710192da7535a89846 Mon Sep 17 00:00:00 2001 From: Peter Novotnak Date: Mon, 8 Mar 2021 10:56:21 -0800 Subject: [PATCH 3/3] safer, more flexible exec functionality using pipes --- jiracli/templates.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/jiracli/templates.go b/jiracli/templates.go index 5041bf53..7e088698 100644 --- a/jiracli/templates.go +++ b/jiracli/templates.go @@ -72,18 +72,22 @@ func TemplateProcessor() *template.Template { "jira": func() string { return os.Args[0] }, - "jiraExec": func(args ...interface{}) *exec.Cmd { + "jiraExec": func(stdin interface{}, args ...interface{}) *exec.Cmd { var outb, errb bytes.Buffer - var argStrings []string = make([]string, len(args)) + var argStrings = make([]string, len(args)) for i, d := range args { argStrings[i] = fmt.Sprint(d) } cmd := exec.Command(os.Args[0], argStrings...) + if stdinStr := fmt.Sprint(stdin); stdinStr != "" { + cmd.Stdin = strings.NewReader(stdinStr) + } cmd.Stdout = &outb cmd.Stderr = &errb err := cmd.Run() if err != nil { log.Warning("error running %v: %v", cmd.Args, err) + log.Warning("error: %v", cmd.Stderr) } return cmd },