mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
3a1279393f
Remove forked reference package. Use normalized named values everywhere and familiar functions to convert back to familiar strings for UX and storage compatibility. Enforce that the source repository in the distribution metadata is always a normalized string, ignore invalid values which are not. Update distribution tests to use normalized values. Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package client
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"net/url"
|
|
|
|
"github.com/docker/distribution/reference"
|
|
"github.com/docker/docker/api/types"
|
|
"golang.org/x/net/context"
|
|
)
|
|
|
|
// ContainerCommit applies changes into a container and creates a new tagged image.
|
|
func (cli *Client) ContainerCommit(ctx context.Context, container string, options types.ContainerCommitOptions) (types.IDResponse, error) {
|
|
var repository, tag string
|
|
if options.Reference != "" {
|
|
ref, err := reference.ParseNormalizedNamed(options.Reference)
|
|
if err != nil {
|
|
return types.IDResponse{}, err
|
|
}
|
|
|
|
if _, isCanonical := ref.(reference.Canonical); isCanonical {
|
|
return types.IDResponse{}, errors.New("refusing to create a tag with a digest reference")
|
|
}
|
|
ref = reference.TagNameOnly(ref)
|
|
|
|
if tagged, ok := ref.(reference.Tagged); ok {
|
|
tag = tagged.Tag()
|
|
}
|
|
repository = reference.FamiliarName(ref)
|
|
}
|
|
|
|
query := url.Values{}
|
|
query.Set("container", container)
|
|
query.Set("repo", repository)
|
|
query.Set("tag", tag)
|
|
query.Set("comment", options.Comment)
|
|
query.Set("author", options.Author)
|
|
for _, change := range options.Changes {
|
|
query.Add("changes", change)
|
|
}
|
|
if options.Pause != true {
|
|
query.Set("pause", "0")
|
|
}
|
|
|
|
var response types.IDResponse
|
|
resp, err := cli.post(ctx, "/commit", query, options.Config, nil)
|
|
if err != nil {
|
|
return response, err
|
|
}
|
|
|
|
err = json.NewDecoder(resp.body).Decode(&response)
|
|
ensureReaderClosed(resp)
|
|
return response, err
|
|
}
|