marshal: correctly handle empty shell commands#298
Merged
glours merged 1 commit intocompose-spec:masterfrom Aug 9, 2022
Merged
marshal: correctly handle empty shell commands#298glours merged 1 commit intocompose-spec:masterfrom
glours merged 1 commit intocompose-spec:masterfrom
Conversation
Member
Author
|
See docker/compose#9634 for more context/motivation |
It's possible to override an image's entrypoint for service container's by setting `service.entrypoint`. (Same applies for image's command.) In some circumstances, it's desirable to explicitly "clear" these out from the image. However, currently, if you do specify `entrypoint: ''` or `entrypoint: []`, when the config is marshaled, that gets lost because of Go default value handling. Handling this varies slightly between YAML + JSON: * YAML: implement `IsZeroer` interface to specify that only `nil` slices should be omittable & `MarshalYAML` to ensure that `nil` slices marshal as `null` rather than `[]` * JSON: do NOT use `omitempty`, meaning that the result will _always_ be present in the marshaled output, unfortunately, but it will be correct! This preserves compatibility and "pretty" serialization for YAML at the expense of some slightly subtle marshalling semantics. Signed-off-by: Milas Bowman <milas.bowman@docker.com>
fba1537 to
666827d
Compare
Member
Author
|
Reviewers, for your sanity, view with whitespace changes ignored: https://github.com/compose-spec/compose-go/pull/298/files?diff=split&w=1 ( |
Member
Author
|
Marked this as ready for review - no changes, but I didn't hear any major concerns out-of-band with this approach 🙃 |
ndeloof
approved these changes
Aug 9, 2022
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
It's possible to override an image's entrypoint for service
container's by setting
service.entrypoint. (Same applies forimage's command.)
In some circumstances, it's desirable to explicitly "clear"
these out from the image. However, currently, if you do specify
entrypoint: ''orentrypoint: [], when the config ismarshaled, that gets lost because of Go default value handling.
Handling this varies slightly between YAML + JSON:
IsZeroerinterface to specify that onlynilslices should be omittable &MarshalYAMLto ensurethat
nilslices marshal asnullrather than[]omitempty, meaning that the result willalways be present in the marshaled output, unfortunately,
but it will be correct!
This preserves compatibility and "pretty" serialization for
YAML at the expense of some slightly subtle marshalling
semantics.