github.com/psexton/git-lfs@v2.1.1-0.20170517224304-289a18b2bc53+incompatible/lfs/gitscanner_cmd.go (about) 1 package lfs 2 3 import ( 4 "bufio" 5 "io" 6 "os/exec" 7 "strings" 8 9 "github.com/rubyist/tracerx" 10 ) 11 12 type wrappedCmd struct { 13 Stdin io.WriteCloser 14 Stdout *bufio.Reader 15 Stderr *bufio.Reader 16 *exec.Cmd 17 } 18 19 // startCommand starts up a command and creates a stdin pipe and a buffered 20 // stdout & stderr pipes, wrapped in a wrappedCmd. The stdout buffer will be of stdoutBufSize 21 // bytes. 22 func startCommand(command string, args ...string) (*wrappedCmd, error) { 23 cmd := exec.Command(command, args...) 24 stdout, err := cmd.StdoutPipe() 25 if err != nil { 26 return nil, err 27 } 28 stderr, err := cmd.StderrPipe() 29 if err != nil { 30 return nil, err 31 } 32 33 stdin, err := cmd.StdinPipe() 34 if err != nil { 35 return nil, err 36 } 37 38 tracerx.Printf("run_command: %s %s", command, strings.Join(args, " ")) 39 if err := cmd.Start(); err != nil { 40 return nil, err 41 } 42 43 return &wrappedCmd{ 44 stdin, 45 bufio.NewReaderSize(stdout, stdoutBufSize), 46 bufio.NewReaderSize(stderr, stdoutBufSize), 47 cmd, 48 }, nil 49 }