MCPcopy Index your code
hub / github.com/devspace-sh/devspace / HandleNonPTY

Function HandleNonPTY

helper/ssh/server.go:124–193  ·  view source on GitHub ↗
(sess ssh.Session, cmd *exec.Cmd, decorateReader func(reader io.Reader) io.Reader)

Source from the content-addressed store, hash-verified

122}
123
124func HandleNonPTY(sess ssh.Session, cmd *exec.Cmd, decorateReader func(reader io.Reader) io.Reader) (err error) {
125 // init pipes
126 stdinWriter, err := cmd.StdinPipe()
127 if err != nil {
128 return err
129 }
130 stdoutReader, err := cmd.StdoutPipe()
131 if err != nil {
132 return err
133 }
134 stderrReader, err := cmd.StderrPipe()
135 if err != nil {
136 return err
137 }
138
139 // start the command
140 err = cmd.Start()
141 if err != nil {
142 return errors.Wrap(err, "start command")
143 }
144
145 stdoutDone := make(chan struct{})
146 go func() {
147 defer close(stdoutDone)
148 defer stdoutReader.Close()
149
150 var reader io.Reader = stdoutReader
151 if decorateReader != nil {
152 reader = decorateReader(stdoutReader)
153 }
154
155 _, _ = io.Copy(sess, reader)
156 }()
157
158 stderrDone := make(chan struct{})
159 go func() {
160 defer close(stderrDone)
161 defer stderrReader.Close()
162
163 var reader io.Reader = stderrReader
164 if decorateReader != nil {
165 reader = decorateReader(stderrReader)
166 }
167
168 _, _ = io.Copy(sess.Stderr(), reader)
169 }()
170
171 go func() {
172 defer stdinWriter.Close()
173
174 _, _ = io.Copy(stdinWriter, sess)
175 }()
176
177 err = cmd.Wait()
178 if err != nil {
179 return err
180 }
181

Callers 1

handlerMethod · 0.85

Calls 5

closeFunction · 0.85
StartMethod · 0.65
CloseMethod · 0.65
CopyMethod · 0.65
WaitMethod · 0.65

Tested by

no test coverage detected