packer communicator: use iochan.LineReader instead of iochan.LineReader(in)
* as it's the recommended way
This commit is contained in:
parent
d8d5631dc2
commit
2a90ce6178
2
go.mod
2
go.mod
|
@ -113,7 +113,7 @@ require (
|
||||||
github.com/mitchellh/go-fs v0.0.0-20180402234041-7b48fa161ea7
|
github.com/mitchellh/go-fs v0.0.0-20180402234041-7b48fa161ea7
|
||||||
github.com/mitchellh/go-homedir v1.0.0
|
github.com/mitchellh/go-homedir v1.0.0
|
||||||
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed
|
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed
|
||||||
github.com/mitchellh/iochan v0.0.0-20150529224432-87b45ffd0e95
|
github.com/mitchellh/iochan v1.0.1-0.20190408094311-e9f5309a3061
|
||||||
github.com/mitchellh/mapstructure v0.0.0-20180111000720-b4575eea38cc
|
github.com/mitchellh/mapstructure v0.0.0-20180111000720-b4575eea38cc
|
||||||
github.com/mitchellh/panicwrap v0.0.0-20170106182340-fce601fe5557
|
github.com/mitchellh/panicwrap v0.0.0-20170106182340-fce601fe5557
|
||||||
github.com/mitchellh/prefixedio v0.0.0-20151214002211-6e6954073784
|
github.com/mitchellh/prefixedio v0.0.0-20151214002211-6e6954073784
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -307,6 +307,8 @@ github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed h1:FI2NIv6fpef6BQ
|
||||||
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed/go.mod h1:3rdaFaCv4AyBgu5ALFM0+tSuHrBh6v692nyQe3ikrq0=
|
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed/go.mod h1:3rdaFaCv4AyBgu5ALFM0+tSuHrBh6v692nyQe3ikrq0=
|
||||||
github.com/mitchellh/iochan v0.0.0-20150529224432-87b45ffd0e95 h1:aHWVygBsLb+Kls/35B3tevL1hvDxZ0UklPA0BmhqTEk=
|
github.com/mitchellh/iochan v0.0.0-20150529224432-87b45ffd0e95 h1:aHWVygBsLb+Kls/35B3tevL1hvDxZ0UklPA0BmhqTEk=
|
||||||
github.com/mitchellh/iochan v0.0.0-20150529224432-87b45ffd0e95/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
|
github.com/mitchellh/iochan v0.0.0-20150529224432-87b45ffd0e95/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
|
||||||
|
github.com/mitchellh/iochan v1.0.1-0.20190408094311-e9f5309a3061 h1:BSEloc+wp5WA/fu0jw5HBWOfoKLdvpqi38ZP22eNemg=
|
||||||
|
github.com/mitchellh/iochan v1.0.1-0.20190408094311-e9f5309a3061/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
|
||||||
github.com/mitchellh/mapstructure v0.0.0-20180111000720-b4575eea38cc h1:5T6hzGUO5OrL6MdYXYoLQtRWJDDgjdlOVBn9mIqGY1g=
|
github.com/mitchellh/mapstructure v0.0.0-20180111000720-b4575eea38cc h1:5T6hzGUO5OrL6MdYXYoLQtRWJDDgjdlOVBn9mIqGY1g=
|
||||||
github.com/mitchellh/mapstructure v0.0.0-20180111000720-b4575eea38cc/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v0.0.0-20180111000720-b4575eea38cc/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
github.com/mitchellh/panicwrap v0.0.0-20170106182340-fce601fe5557 h1:w1QuuAA2km2Hax+EPamrq5ZRBeaNv2vsjvgB4an0zoU=
|
github.com/mitchellh/panicwrap v0.0.0-20170106182340-fce601fe5557 h1:w1QuuAA2km2Hax+EPamrq5ZRBeaNv2vsjvgB4an0zoU=
|
||||||
|
|
|
@ -4,9 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"unicode"
|
|
||||||
|
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
|
|
||||||
|
@ -119,9 +117,9 @@ func (r *RemoteCmd) RunWithUi(ctx context.Context, c Communicator, ui Ui) error
|
||||||
|
|
||||||
// Loop and get all our output until done.
|
// Loop and get all our output until done.
|
||||||
printFn := func(in io.Reader, out func(string)) error {
|
printFn := func(in io.Reader, out func(string)) error {
|
||||||
for output := range iochan.DelimReader(in, '\n') {
|
for output := range iochan.LineReader(in) {
|
||||||
if output != "" {
|
if output != "" {
|
||||||
out(cleanOutputLine(output))
|
out(output)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -176,19 +174,3 @@ func (r *RemoteCmd) initchan() {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// cleanOutputLine cleans up a line so that '\r' don't muck up the
|
|
||||||
// UI output when we're reading from a remote command.
|
|
||||||
func cleanOutputLine(line string) string {
|
|
||||||
// Trim surrounding whitespace
|
|
||||||
line = strings.TrimRightFunc(line, unicode.IsSpace)
|
|
||||||
|
|
||||||
// Trim up to the first carriage return, since that text would be
|
|
||||||
// lost anyways.
|
|
||||||
idx := strings.LastIndex(line, "\r")
|
|
||||||
if idx > -1 {
|
|
||||||
line = line[idx+1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
module github.com/mitchellh/iochan
|
|
@ -39,3 +39,25 @@ func DelimReader(r io.Reader, delim byte) <-chan string {
|
||||||
|
|
||||||
return ch
|
return ch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LineReader takes an io.Reader and produces the contents of the reader on the
|
||||||
|
// returned channel. Internally bufio.NewScanner is used, io.ScanLines parses
|
||||||
|
// lines and returns them without carriage return. Scan can panic if the split
|
||||||
|
// function returns too many empty tokens without advancing the input.
|
||||||
|
//
|
||||||
|
// The channel will be closed either by reaching the end of the input or an
|
||||||
|
// error.
|
||||||
|
func LineReader(r io.Reader) <-chan string {
|
||||||
|
ch := make(chan string)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
scanner := bufio.NewScanner(r)
|
||||||
|
defer close(ch)
|
||||||
|
|
||||||
|
for scanner.Scan() {
|
||||||
|
ch <- scanner.Text()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
return ch
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue