Skip to content

Conversation

@thaJeztah
Copy link
Member

@thaJeztah thaJeztah commented Aug 15, 2025

relates to:

opts: deprecate QuotedString

The QuotedString option was added in moby@e4c1f07 and moby@abe32de to work around a regression in Docker 1.13 that caused docker-machine to fail. docker-machine produced instructions on how to set up a cli to connect to the Machine it produced. These instructions used quotes around the paths for TLS certificates, but with an = for the flag's values instead of a space; due to this the shell would not handle stripping quotes, so the CLI would now get the value including quotes.

Preserving quotes in such cases is expected (and standard behavior), but versions of Docker before 1.13 used a custom "mflag" package for flag parsing, and that package contained custom handling for quotes (added in moby@0e9c40e).

For other flags, this problem could be solved by the user, but as these instructions were produced by docker-machine's config command, an exception was made for the --tls-xxx flags. From moby-29761:

The flag trimming behaviour is really unusual, and I would say unexpected.
I think removing it is generally the right idea. Since we have one very
common case where it's necessary for backwards compatibility we need to
add a special case, but I don't think we should apply that case to every
flag.

The QuotedString implementation has various limitations, as it doesn't follow the same handling of quotes as a shell would.

Given that Docker Machine reached EOL a long time ago and other options, such as docker context, have been added to configure the CLI to connect to a specific host (with corresponding TLS configuration), we should remove the special handling for these flags, as it's inconsitent with all other flags, and not worth maintaining for a tool that no longer exists.

This patch deprecates the QuotedString option and removes its use. A temporary, non-exported copy is added, but will be removed in the next release.

- What I did

- How I did it

- How to verify it

- Human readable description for the release notes

Go SDK: opts: deprecate `QuotedString`. This utility is no longer used, and will be removed in the next release.

- A picture of a cute animal (not mandatory but encouraged)

The `QuotedString` option was added in [moby@e4c1f07] and [moby@abe32de]
to work around a regression in Docker 1.13 that caused `docker-machine`
to fail. `docker-machine` produced instructions on how to set up a cli
to connect to the Machine it produced. These instructions used quotes
around the paths for TLS certificates, but with an `=` for the flag's
values instead of a space; due to this the shell would not handle
stripping quotes, so the CLI would now get the value including quotes.

Preserving quotes in such cases is expected (and standard behavior), but
versions of Docker before 1.13 used a custom "mflag" package for flag
parsing, and that package contained custom handling for quotes (added
in [moby@0e9c40e]).

For other flags, this problem could be solved by the user, but as these
instructions were produced by `docker-machine`'s `config` command, an
exception was made for the `--tls-xxx` flags. From [moby-29761]:

> The flag trimming behaviour is really unusual, and I would say unexpected.
> I think removing it is generally the right idea. Since we have one very
> common case where it's necessary for backwards compatibility we need to
> add a special case, but I don't think we should apply that case to every
> flag.

The `QuotedString` implementation has various limitations, as it doesn't
follow the same handling of quotes as a shell would.

Given that Docker Machine reached EOL a long time ago and other options,
such as `docker context`, have been added to configure the CLI to connect
to a specific host (with corresponding TLS configuration), we should remove
the special handling for these flags, as it's inconsitent with all other
flags, and not worth maintaining for a tool that no longer exists.

This patch deprecates the `QuotedString` option and removes its use. A
temporary, non-exported copy is added, but will be removed in the next
release.

[moby-29761]: moby/moby#29761 (comment)
[moby@e4c1f07]: moby/moby@e4c1f07
[moby@abe32de]: moby/moby@abe32de
[moby@0e9c40e]: moby/moby@0e9c40e
[moby@c79a169]: moby/moby@c79a169

Signed-off-by: Sebastiaan van Stijn <[email protected]>
@thaJeztah thaJeztah added this to the 29.0.0 milestone Aug 15, 2025
@thaJeztah thaJeztah added impact/deprecation status/2-code-review kind/refactor PR's that refactor, or clean-up code area/go-sdk Changes affecting the Go SDK impact/go-sdk Noteworthy (compatibility changes) in the Go SDK process/cherry-pick/28.x labels Aug 15, 2025
@codecov-commenter
Copy link

Codecov Report

❌ Patch coverage is 70.00000% with 6 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
cli/flags/options.go 70.00% 5 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@austinvazquez austinvazquez merged commit 842f8be into docker:master Aug 15, 2025
135 of 136 checks passed
@thaJeztah thaJeztah deleted the deprecate_quotedstring branch August 15, 2025 20:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/go-sdk Changes affecting the Go SDK impact/deprecation impact/go-sdk Noteworthy (compatibility changes) in the Go SDK kind/refactor PR's that refactor, or clean-up code process/cherry-picked status/2-code-review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants