package svn2git2aur import ( "os/exec" "bytes" ) func pipeline(cmds ...*exec.Cmd) (err error) { for i, cmd := range cmds[:len(cmds)-1] { cmds[i+1].Stdin, err = cmd.StdoutPipe() if err != nil { return } } stderr := make([]bytes.Buffer, len(cmds)) for i, cmd := range cmds { cmd.Stderr = &stderr[i] if err = cmd.Start(); err != nil { break } } for i, cmd := range cmds { if cmd.Process == nil { continue } if _err := cmd.Wait(); _err != nil { if ee, ok := _err.(*exec.ExitError); ok { ee.Stderr = stderr[i].Bytes() } if err != nil { err = _err } } } return }