From 5dec27b6f1f6921ae288a3094b796929b59fc539 Mon Sep 17 00:00:00 2001 From: Samuel Karp Date: Tue, 25 May 2021 00:12:21 -0700 Subject: [PATCH] ctr: exec handle pty resize after Start Handle initial pty resize after the exec process has started and the pty is available, consistent with the behavior of ctr run. Signed-off-by: Samuel Karp --- cmd/ctr/commands/tasks/exec.go | 46 ++++++++++++++++------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/cmd/ctr/commands/tasks/exec.go b/cmd/ctr/commands/tasks/exec.go index ff02dc4d4..c1a4b8bbd 100644 --- a/cmd/ctr/commands/tasks/exec.go +++ b/cmd/ctr/commands/tasks/exec.go @@ -117,30 +117,31 @@ var execCommand = cli.Command{ con console.Console ) - ioOpts := []cio.Opt{cio.WithFIFODir(context.String("fifo-dir"))} - if tty { + fifoDir := context.String("fifo-dir") + logURI := context.String("log-uri") + ioOpts := []cio.Opt{cio.WithFIFODir(fifoDir)} + switch { + case tty && logURI != "": + return errors.New("can't use log-uri with tty") + case logURI != "" && fifoDir != "": + return errors.New("can't use log-uri with fifo-dir") + + case tty: con = console.Current() defer con.Reset() if err := con.SetRaw(); err != nil { return err } ioCreator = cio.NewCreator(append([]cio.Opt{cio.WithStreams(con, con, nil), cio.WithTerminal}, ioOpts...)...) - } else if logURI := context.String("log-uri"); logURI != "" { + + case logURI != "": uri, err := url.Parse(logURI) if err != nil { return err } - - if dir := context.String("fifo-dir"); dir != "" { - return errors.New("can't use log-uri with fifo-dir") - } - - if tty { - return errors.New("can't use log-uri with tty") - } - ioCreator = cio.LogURI(uri) - } else { + + default: ioCreator = cio.NewCreator(append([]cio.Opt{cio.WithStreams(stdinC, os.Stdout, os.Stderr)}, ioOpts...)...) } @@ -161,23 +162,20 @@ var execCommand = cli.Command{ return err } - if !detach { - if tty { - if err := HandleConsoleResize(ctx, process, con); err != nil { - logrus.WithError(err).Error("console resize") - } - } else { - sigc := commands.ForwardAllSignals(ctx, process) - defer commands.StopCatch(sigc) - } - } - if err := process.Start(ctx); err != nil { return err } if detach { return nil } + if tty { + if err := HandleConsoleResize(ctx, process, con); err != nil { + logrus.WithError(err).Error("console resize") + } + } else { + sigc := commands.ForwardAllSignals(ctx, process) + defer commands.StopCatch(sigc) + } status := <-statusC code, _, err := status.Result() if err != nil {