func (process *groupProcess) SetWindowSize(size garden.WindowSize) error { if process.processPty != nil { return ptyutil.SetWinSize(process.processPty, size.Columns, size.Rows) } return nil }
func spawn(cmd *exec.Cmd, ttySpec *garden.TTYSpec, stdout io.Writer, stderr io.Writer) (process, io.WriteCloser, error) { var stdin io.WriteCloser var err error var processPty *os.File if ttySpec != nil { pty, tty, err := pty.Open() if err != nil { return nil, nil, err } // close our end of the tty after the process has spawned defer tty.Close() processPty = pty stdin = pty windowColumns := 80 windowRows := 24 if ttySpec.WindowSize != nil { windowColumns = ttySpec.WindowSize.Columns windowRows = ttySpec.WindowSize.Rows } ptyutil.SetWinSize(pty, windowColumns, windowRows) cmd.Stdin = tty cmd.Stdout = tty cmd.Stderr = tty go io.Copy(stdout, pty) } else { stdin, err = cmd.StdinPipe() if err != nil { return nil, nil, err } cmd.Stdout = stdout cmd.Stderr = stderr } err = cmd.Start() if err != nil { return nil, nil, err } return &groupProcess{ process: cmd.Process, processPty: processPty, }, stdin, nil }