diff --git a/pkgs/utils/execpipe.go b/pkgs/utils/execpipe.go index 4f1ba6b59..74be379f5 100644 --- a/pkgs/utils/execpipe.go +++ b/pkgs/utils/execpipe.go @@ -3,6 +3,7 @@ package utils import ( "bytes" "errors" + "io" "os/exec" ) @@ -10,7 +11,7 @@ import ( // Each command's standard output is connected to the standard input of the next command // and the output of the final command is returned -func ExecPipe(cmds ...*exec.Cmd) (pipeLineOutput []byte, pipeLineError error) { +func ExecPipe(cmds ...*exec.Cmd) (pipeLineOutput io.Reader, pipeLineError error) { // Require at least one command if len(cmds) < 1 { return nil, errors.New("Invalid argument") @@ -30,17 +31,17 @@ func ExecPipe(cmds ...*exec.Cmd) (pipeLineOutput []byte, pipeLineError error) { // Start each command for _, cmd := range cmds { if err := cmd.Start(); err != nil { - return output.Bytes(), err + return &output, err } } // We should Wait() for each command to complete for _, cmd := range cmds { if err := cmd.Wait(); err != nil { - return output.Bytes(), err + return &output, err } } // Return the output - return output.Bytes(), nil + return &output, nil } diff --git a/pkgs/utils/execpipe_test.go b/pkgs/utils/execpipe_test.go index f5fce2415..0a0d6629f 100644 --- a/pkgs/utils/execpipe_test.go +++ b/pkgs/utils/execpipe_test.go @@ -3,9 +3,11 @@ package utils import ( - . "gopkg.in/check.v1" + "io/ioutil" "os/exec" "testing" + + . "gopkg.in/check.v1" ) type MySuite struct{} @@ -29,6 +31,8 @@ func (s *MySuite) TestPiping(c *C) { // Run output, err := ExecPipe(ls, sort) c.Assert(err, IsNil) - c.Assert(len(output), Not(Equals), 0) + outputBytes, err := ioutil.ReadAll(output) + c.Assert(err, IsNil) + c.Assert(len(outputBytes), Not(Equals), 0) } }