This reverts commit fed9fa0f728d338ccf8ed6f507b2d6e184ba5637. This removes the ContextType field, which was temporarily added to provide compatibility with the "compose-cli" wrapper that shipped with Docker Desktop. The compose-cli wrapper extended the context struct with an additional field that was not part of the CLI itself, but was used by Visual Studio to detect the type of context. This temporary field shipped as part of Docker 27.0 June 2024), which should be enough time for Visual Studio to have adjusted their integration. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
package formatter
|
|
|
|
const (
|
|
// ClientContextTableFormat is the default client context format.
|
|
ClientContextTableFormat = "table {{.Name}}{{if .Current}} *{{end}}\t{{.Description}}\t{{.DockerEndpoint}}\t{{.Error}}"
|
|
|
|
dockerEndpointHeader = "DOCKER ENDPOINT"
|
|
quietContextFormat = "{{.Name}}"
|
|
|
|
maxErrLength = 45
|
|
)
|
|
|
|
// NewClientContextFormat returns a Format for rendering using a Context
|
|
func NewClientContextFormat(source string, quiet bool) Format {
|
|
if quiet {
|
|
return quietContextFormat
|
|
}
|
|
if source == TableFormatKey {
|
|
return ClientContextTableFormat
|
|
}
|
|
return Format(source)
|
|
}
|
|
|
|
// ClientContext is a context for display
|
|
type ClientContext struct {
|
|
Name string
|
|
Description string
|
|
DockerEndpoint string
|
|
Current bool
|
|
Error string
|
|
}
|
|
|
|
// ClientContextWrite writes formatted contexts using the Context
|
|
func ClientContextWrite(ctx Context, contexts []*ClientContext) error {
|
|
render := func(format func(subContext SubContext) error) error {
|
|
for _, context := range contexts {
|
|
if err := format(&clientContextContext{c: context}); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
return ctx.Write(newClientContextContext(), render)
|
|
}
|
|
|
|
type clientContextContext struct {
|
|
HeaderContext
|
|
c *ClientContext
|
|
}
|
|
|
|
func newClientContextContext() *clientContextContext {
|
|
ctx := clientContextContext{}
|
|
ctx.Header = SubHeaderContext{
|
|
"Name": NameHeader,
|
|
"Description": DescriptionHeader,
|
|
"DockerEndpoint": dockerEndpointHeader,
|
|
"Error": ErrorHeader,
|
|
}
|
|
return &ctx
|
|
}
|
|
|
|
func (c *clientContextContext) MarshalJSON() ([]byte, error) {
|
|
return MarshalJSON(c)
|
|
}
|
|
|
|
func (c *clientContextContext) Current() bool {
|
|
return c.c.Current
|
|
}
|
|
|
|
func (c *clientContextContext) Name() string {
|
|
return c.c.Name
|
|
}
|
|
|
|
func (c *clientContextContext) Description() string {
|
|
return c.c.Description
|
|
}
|
|
|
|
func (c *clientContextContext) DockerEndpoint() string {
|
|
return c.c.DockerEndpoint
|
|
}
|
|
|
|
// Error returns the truncated error (if any) that occurred when loading the context.
|
|
func (c *clientContextContext) Error() string {
|
|
// TODO(thaJeztah) add "--no-trunc" option to context ls and set default to 30 cols to match "docker service ps"
|
|
return Ellipsis(c.c.Error, maxErrLength)
|
|
}
|