From e404cfe43603615cc9f8f5510f561828cfd0f216 Mon Sep 17 00:00:00 2001 From: afshar Date: Tue, 27 Jan 2015 13:08:25 -0800 Subject: [PATCH 1/4] Added ability to exec arbitrary commands from templates. Naughty, I know. --- helpers/execembed.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 helpers/execembed.go diff --git a/helpers/execembed.go b/helpers/execembed.go new file mode 100644 index 00000000000..8076dfdef1c --- /dev/null +++ b/helpers/execembed.go @@ -0,0 +1,32 @@ +package helpers + +import ( + "bytes" + "os/exec" + + jww "github.com/spf13/jwalterweatherman" +) + +func Exec(args ...string) string { + var out bytes.Buffer + var stderr bytes.Buffer + var arg []string + if len(args) == 0 { + jww.ERROR.Print("Nothing to execute") + return "Nothing to execute" + } + name := args[0] + if len(args) > 1 { + arg = args[1 : len(args)-1] + } + cmd := exec.Command(name, arg...) + cmd.Stdout = &out + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + jww.ERROR.Print("Error executing", err, stderr.String()) + return stderr.String() + } + jww.ERROR.Print("It got here") + + return out.String() +} From 007d91131e5c57b7b32266472974c8bf17408cef Mon Sep 17 00:00:00 2001 From: afshar Date: Tue, 27 Jan 2015 13:20:21 -0800 Subject: [PATCH 2/4] Now add the actual tempalte changes. --- tpl/template.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tpl/template.go b/tpl/template.go index 3cf983ce035..ee7da443f93 100644 --- a/tpl/template.go +++ b/tpl/template.go @@ -831,6 +831,10 @@ func Highlight(in interface{}, lang string) template.HTML { return template.HTML(helpers.Highlight(html.UnescapeString(str), lang)) } +func Exec(args ...string) template.HTML { + return template.HTML(helpers.Exec(args...)) +} + func Markdownify(text string) template.HTML { return template.HTML(helpers.RenderBytes(helpers.RenderingContext{Content: []byte(text), PageFmt: "markdown"})) } @@ -1275,6 +1279,7 @@ func init() { "delimit": Delimit, "sort": Sort, "highlight": Highlight, + "exec": Exec, "add": func(a, b interface{}) (interface{}, error) { return doArithmetic(a, b, '+') }, "sub": func(a, b interface{}) (interface{}, error) { return doArithmetic(a, b, '-') }, "div": func(a, b interface{}) (interface{}, error) { return doArithmetic(a, b, '/') }, From 90f60a3ae4c7b7a543713d5acd4f489d8541d89f Mon Sep 17 00:00:00 2001 From: afshar Date: Tue, 27 Jan 2015 13:25:41 -0800 Subject: [PATCH 3/4] Now add the actual tempalte changes. --- helpers/execembed.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/helpers/execembed.go b/helpers/execembed.go index 8076dfdef1c..0b9ed7e709b 100644 --- a/helpers/execembed.go +++ b/helpers/execembed.go @@ -10,15 +10,15 @@ import ( func Exec(args ...string) string { var out bytes.Buffer var stderr bytes.Buffer - var arg []string - if len(args) == 0 { - jww.ERROR.Print("Nothing to execute") - return "Nothing to execute" - } + var arg []string + if len(args) == 0 { + jww.ERROR.Print("Nothing to execute") + return "Nothing to execute" + } name := args[0] if len(args) > 1 { - arg = args[1 : len(args)-1] - } + arg = args[1 : len(args)-1] + } cmd := exec.Command(name, arg...) cmd.Stdout = &out cmd.Stderr = &stderr From 9af1d1170fd88a9b00ad17321e8c1a582257d76d Mon Sep 17 00:00:00 2001 From: afshar Date: Tue, 27 Jan 2015 13:26:52 -0800 Subject: [PATCH 4/4] Remove debugging statement. --- helpers/execembed.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/helpers/execembed.go b/helpers/execembed.go index 0b9ed7e709b..0fa7aac8788 100644 --- a/helpers/execembed.go +++ b/helpers/execembed.go @@ -26,7 +26,5 @@ func Exec(args ...string) string { jww.ERROR.Print("Error executing", err, stderr.String()) return stderr.String() } - jww.ERROR.Print("It got here") - return out.String() }