1
0
mirror of https://github.com/golang/go synced 2024-11-22 09:24:41 -07:00

cmd/go: in list, don't print blank lines for no output

Otherwise
        go list -f "{{if .Stale}}{{.ImportPath}}{{end}}" all
and similar commands can print pages of empty lines.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5696058
This commit is contained in:
Rob Pike 2012-02-25 08:00:55 +11:00
parent 102274a30e
commit 1086dd7cfb

View File

@ -7,6 +7,7 @@ package main
import ( import (
"bufio" "bufio"
"encoding/json" "encoding/json"
"io"
"os" "os"
"text/template" "text/template"
) )
@ -82,8 +83,8 @@ var listJson = cmdList.Flag.Bool("json", false, "")
var nl = []byte{'\n'} var nl = []byte{'\n'}
func runList(cmd *Command, args []string) { func runList(cmd *Command, args []string) {
out := bufio.NewWriter(os.Stdout) out := newCountingWriter(os.Stdout)
defer out.Flush() defer out.w.Flush()
var do func(*Package) var do func(*Package)
if *listJson { if *listJson {
@ -97,15 +98,19 @@ func runList(cmd *Command, args []string) {
out.Write(nl) out.Write(nl)
} }
} else { } else {
tmpl, err := template.New("main").Parse(*listFmt + "\n") tmpl, err := template.New("main").Parse(*listFmt)
if err != nil { if err != nil {
fatalf("%s", err) fatalf("%s", err)
} }
do = func(p *Package) { do = func(p *Package) {
out.Reset()
if err := tmpl.Execute(out, p); err != nil { if err := tmpl.Execute(out, p); err != nil {
out.Flush() out.Flush()
fatalf("%s", err) fatalf("%s", err)
} }
if out.Count() > 0 {
out.w.WriteRune('\n')
}
} }
} }
@ -118,3 +123,33 @@ func runList(cmd *Command, args []string) {
do(pkg) do(pkg)
} }
} }
// CountingWriter counts its data, so we can avoid appending a newline
// if there was no actual output.
type CountingWriter struct {
w *bufio.Writer
count int64
}
func newCountingWriter(w io.Writer) *CountingWriter {
return &CountingWriter{
w: bufio.NewWriter(w),
}
}
func (cw *CountingWriter) Write(p []byte) (n int, err error) {
cw.count += int64(len(p))
return cw.w.Write(p)
}
func (cw *CountingWriter) Flush() {
cw.w.Flush()
}
func (cw *CountingWriter) Reset() {
cw.count = 0
}
func (cw *CountingWriter) Count() int64 {
return cw.count
}