]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: add join template function.
authorRoger Peppe <rogpeppe@gmail.com>
Mon, 22 Oct 2012 07:58:27 +0000 (08:58 +0100)
committerRoger Peppe <rogpeppe@gmail.com>
Mon, 22 Oct 2012 07:58:27 +0000 (08:58 +0100)
It's common to use the go list command in shell scripts, but
currently it's awkward to print a string slice from the Package
type in a way that's easily parseable by the shell.  For example:

        go list -f '{{range .Deps}}{{.}}
        {{end}}'

(and even that prints an unwanted new line at the end|).

To make this easier, this CL adds a "join" function to the
format template.

        go list -f '{{join .Deps "\n"}}'

R=rsc, dsymonds, minux.ma, remyoudompheng, r
CC=golang-dev
https://golang.org/cl/6680044

src/cmd/go/list.go

index 91b812f10a9a26bfd09730603b2848af51c7efb4..391c47e94a1bee9e9cc86c631b6a7e849af61a55 100644 (file)
@@ -9,6 +9,7 @@ import (
        "encoding/json"
        "io"
        "os"
+       "strings"
        "text/template"
 )
 
@@ -24,10 +25,10 @@ The default output shows the package import path:
     code.google.com/p/goauth2/oauth
     code.google.com/p/sqlite
 
-The -f flag specifies an alternate format for the list,
-using the syntax of package template.  The default output
-is equivalent to -f '{{.ImportPath}}'.  The struct
-being passed to the template is:
+The -f flag specifies an alternate format for the list, using the
+syntax of package template.  The default output is equivalent to -f
+'{{.ImportPath}}'.  One extra template function is available, "join",
+which calls strings.Join. The struct being passed to the template is:
 
     type Package struct {
         Dir        string // directory containing package sources
@@ -113,7 +114,7 @@ func runList(cmd *Command, args []string) {
                        out.Write(nl)
                }
        } else {
-               tmpl, err := template.New("main").Parse(*listFmt)
+               tmpl, err := template.New("main").Funcs(template.FuncMap{"join": strings.Join}).Parse(*listFmt)
                if err != nil {
                        fatalf("%s", err)
                }