package commands import ( "context" "fmt" "github.com/docker/buildx/monitor/types" "github.com/pkg/errors" ) type DisconnectCmd struct { m types.Monitor } func NewDisconnectCmd(m types.Monitor) types.Command { return &DisconnectCmd{m} } func (cm *DisconnectCmd) Info() types.CommandInfo { return types.CommandInfo{ Name: "disconnect", HelpMessage: "disconnect a client from a buildx server. Specific session ID can be specified an arg", HelpMessageLong: fmt.Sprintf(` Usage: disconnect [ID] ID is for a session (visible via list command). Default is %q. `, cm.m.AttachedSessionID()), } } func (cm *DisconnectCmd) Exec(ctx context.Context, args []string) error { target := cm.m.AttachedSessionID() if len(args) >= 2 { target = args[1] } else if target == "" { return errors.Errorf("no attaching session") } isProcess, err := isProcessID(ctx, cm.m, target) if err == nil && isProcess { sid := cm.m.AttachedSessionID() if sid == "" { return errors.Errorf("no attaching session") } if err := cm.m.DisconnectProcess(ctx, sid, target); err != nil { return errors.Errorf("disconnecting from process failed %v", target) } return nil } if err := cm.m.DisconnectSession(ctx, target); err != nil { return errors.Errorf("disconnecting from session failed: %v", err) } return nil }