mirror of https://github.com/docker/cli.git
Bump moby/moby to e11bf870a3170a1d2b1e177a0d7ccc66200bd643
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
b6a628c295
commit
a3be7a6720
|
@ -5,7 +5,7 @@ github.com/coreos/etcd v3.2.1
|
||||||
github.com/cpuguy83/go-md2man a65d4d2de4d5f7c74868dfa9b202a3c8be315aaa
|
github.com/cpuguy83/go-md2man a65d4d2de4d5f7c74868dfa9b202a3c8be315aaa
|
||||||
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
|
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
|
||||||
github.com/docker/distribution edc3ab29cdff8694dd6feb85cfeb4b5f1b38ed9c
|
github.com/docker/distribution edc3ab29cdff8694dd6feb85cfeb4b5f1b38ed9c
|
||||||
github.com/docker/docker a1be987ea9e03e5ebdb1b415a7acdd8d6f0aaa08
|
github.com/docker/docker e11bf870a3170a1d2b1e177a0d7ccc66200bd643
|
||||||
github.com/docker/docker-credential-helpers 3c90bd29a46b943b2a9842987b58fb91a7c1819b
|
github.com/docker/docker-credential-helpers 3c90bd29a46b943b2a9842987b58fb91a7c1819b
|
||||||
# the docker/go package contains a customized version of canonical/json
|
# the docker/go package contains a customized version of canonical/json
|
||||||
# and is used by Notary. The package is periodically rebased on current Go versions.
|
# and is used by Notary. The package is periodically rebased on current Go versions.
|
||||||
|
|
|
@ -3,7 +3,7 @@ package api
|
||||||
// Common constants for daemon and client.
|
// Common constants for daemon and client.
|
||||||
const (
|
const (
|
||||||
// DefaultVersion of Current REST API
|
// DefaultVersion of Current REST API
|
||||||
DefaultVersion string = "1.35"
|
DefaultVersion string = "1.36"
|
||||||
|
|
||||||
// NoBaseImageSpecifier is the symbol used by the FROM
|
// NoBaseImageSpecifier is the symbol used by the FROM
|
||||||
// command to specify that no base image is to be used.
|
// command to specify that no base image is to be used.
|
||||||
|
|
|
@ -7,7 +7,7 @@ package container
|
||||||
// See hack/generate-swagger-api.sh
|
// See hack/generate-swagger-api.sh
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// ContainerChangeResponseItem container change response item
|
// ContainerChangeResponseItem change item in response to ContainerChanges operation
|
||||||
// swagger:model ContainerChangeResponseItem
|
// swagger:model ContainerChangeResponseItem
|
||||||
type ContainerChangeResponseItem struct {
|
type ContainerChangeResponseItem struct {
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ package container
|
||||||
// See hack/generate-swagger-api.sh
|
// See hack/generate-swagger-api.sh
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// ContainerCreateCreatedBody container create created body
|
// ContainerCreateCreatedBody OK response to ContainerCreate operation
|
||||||
// swagger:model ContainerCreateCreatedBody
|
// swagger:model ContainerCreateCreatedBody
|
||||||
type ContainerCreateCreatedBody struct {
|
type ContainerCreateCreatedBody struct {
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ package container
|
||||||
// See hack/generate-swagger-api.sh
|
// See hack/generate-swagger-api.sh
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// ContainerTopOKBody container top o k body
|
// ContainerTopOKBody OK response to ContainerTop operation
|
||||||
// swagger:model ContainerTopOKBody
|
// swagger:model ContainerTopOKBody
|
||||||
type ContainerTopOKBody struct {
|
type ContainerTopOKBody struct {
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ package container
|
||||||
// See hack/generate-swagger-api.sh
|
// See hack/generate-swagger-api.sh
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// ContainerUpdateOKBody container update o k body
|
// ContainerUpdateOKBody OK response to ContainerUpdate operation
|
||||||
// swagger:model ContainerUpdateOKBody
|
// swagger:model ContainerUpdateOKBody
|
||||||
type ContainerUpdateOKBody struct {
|
type ContainerUpdateOKBody struct {
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ type ContainerWaitOKBodyError struct {
|
||||||
Message string `json:"Message,omitempty"`
|
Message string `json:"Message,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainerWaitOKBody container wait o k body
|
// ContainerWaitOKBody OK response to ContainerWait operation
|
||||||
// swagger:model ContainerWaitOKBody
|
// swagger:model ContainerWaitOKBody
|
||||||
type ContainerWaitOKBody struct {
|
type ContainerWaitOKBody struct {
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ package image
|
||||||
// See hack/generate-swagger-api.sh
|
// See hack/generate-swagger-api.sh
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// HistoryResponseItem history response item
|
// HistoryResponseItem individual image layer information in response to ImageHistory operation
|
||||||
// swagger:model HistoryResponseItem
|
// swagger:model HistoryResponseItem
|
||||||
type HistoryResponseItem struct {
|
type HistoryResponseItem struct {
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,10 @@ func Clone(remoteURL string) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return cloneGitRepo(repo)
|
||||||
|
}
|
||||||
|
|
||||||
|
func cloneGitRepo(repo gitRepo) (checkoutDir string, err error) {
|
||||||
fetch := fetchArgs(repo.remote, repo.ref)
|
fetch := fetchArgs(repo.remote, repo.ref)
|
||||||
|
|
||||||
root, err := ioutil.TempDir("", "docker-build-git")
|
root, err := ioutil.TempDir("", "docker-build-git")
|
||||||
|
@ -36,6 +40,12 @@ func Clone(remoteURL string) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
os.RemoveAll(root)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
if out, err := gitWithinDir(root, "init"); err != nil {
|
if out, err := gitWithinDir(root, "init"); err != nil {
|
||||||
return "", errors.Wrapf(err, "failed to init repo at %s: %s", root, out)
|
return "", errors.Wrapf(err, "failed to init repo at %s: %s", root, out)
|
||||||
}
|
}
|
||||||
|
@ -50,7 +60,19 @@ func Clone(remoteURL string) (string, error) {
|
||||||
return "", errors.Wrapf(err, "error fetching: %s", output)
|
return "", errors.Wrapf(err, "error fetching: %s", output)
|
||||||
}
|
}
|
||||||
|
|
||||||
return checkoutGit(root, repo.ref, repo.subdir)
|
checkoutDir, err = checkoutGit(root, repo.ref, repo.subdir)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := exec.Command("git", "submodule", "update", "--init", "--recursive", "--depth=1")
|
||||||
|
cmd.Dir = root
|
||||||
|
output, err := cmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
return "", errors.Wrapf(err, "error initializing submodules: %s", output)
|
||||||
|
}
|
||||||
|
|
||||||
|
return checkoutDir, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseRemoteURL(remoteURL string) (gitRepo, error) {
|
func parseRemoteURL(remoteURL string) (gitRepo, error) {
|
||||||
|
@ -96,7 +118,7 @@ func getRefAndSubdir(fragment string) (ref string, subdir string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchArgs(remoteURL string, ref string) []string {
|
func fetchArgs(remoteURL string, ref string) []string {
|
||||||
args := []string{"fetch", "--recurse-submodules=yes"}
|
args := []string{"fetch"}
|
||||||
|
|
||||||
if supportsShallowClone(remoteURL) {
|
if supportsShallowClone(remoteURL) {
|
||||||
args = append(args, "--depth", "1")
|
args = append(args, "--depth", "1")
|
||||||
|
|
|
@ -30,7 +30,7 @@ func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path stri
|
||||||
}
|
}
|
||||||
|
|
||||||
// CopyToContainer copies content into the container filesystem.
|
// CopyToContainer copies content into the container filesystem.
|
||||||
// Note that `content` must be a Reader for a TAR
|
// Note that `content` must be a Reader for a TAR archive
|
||||||
func (cli *Client) CopyToContainer(ctx context.Context, container, path string, content io.Reader, options types.CopyToContainerOptions) error {
|
func (cli *Client) CopyToContainer(ctx context.Context, container, path string, content io.Reader, options types.CopyToContainerOptions) error {
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
query.Set("path", filepath.ToSlash(path)) // Normalize the paths used in the API.
|
query.Set("path", filepath.ToSlash(path)) // Normalize the paths used in the API.
|
||||||
|
@ -59,7 +59,7 @@ func (cli *Client) CopyToContainer(ctx context.Context, container, path string,
|
||||||
}
|
}
|
||||||
|
|
||||||
// CopyFromContainer gets the content from the container and returns it as a Reader
|
// CopyFromContainer gets the content from the container and returns it as a Reader
|
||||||
// to manipulate it in the host. It's up to the caller to close the reader.
|
// for a TAR archive to manipulate it in the host. It's up to the caller to close the reader.
|
||||||
func (cli *Client) CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
|
func (cli *Client) CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
|
||||||
query := make(url.Values, 1)
|
query := make(url.Values, 1)
|
||||||
query.Set("path", filepath.ToSlash(srcPath)) // Normalize the paths used in the API.
|
query.Set("path", filepath.ToSlash(srcPath)) // Normalize the paths used in the API.
|
||||||
|
|
|
@ -74,7 +74,7 @@ func (cli *Client) ContainerLogs(ctx context.Context, container string, options
|
||||||
|
|
||||||
resp, err := cli.get(ctx, "/containers/"+container+"/logs", query, nil)
|
resp, err := cli.get(ctx, "/containers/"+container+"/logs", query, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, wrapResponseError(err, resp, "container", container)
|
||||||
}
|
}
|
||||||
return resp.body, nil
|
return resp.body, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,11 +6,11 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/container"
|
containertypes "github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/events"
|
"github.com/docker/docker/api/types/events"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
"github.com/docker/docker/api/types/image"
|
"github.com/docker/docker/api/types/image"
|
||||||
"github.com/docker/docker/api/types/network"
|
networktypes "github.com/docker/docker/api/types/network"
|
||||||
"github.com/docker/docker/api/types/registry"
|
"github.com/docker/docker/api/types/registry"
|
||||||
"github.com/docker/docker/api/types/swarm"
|
"github.com/docker/docker/api/types/swarm"
|
||||||
volumetypes "github.com/docker/docker/api/types/volume"
|
volumetypes "github.com/docker/docker/api/types/volume"
|
||||||
|
@ -43,8 +43,8 @@ type CommonAPIClient interface {
|
||||||
type ContainerAPIClient interface {
|
type ContainerAPIClient interface {
|
||||||
ContainerAttach(ctx context.Context, container string, options types.ContainerAttachOptions) (types.HijackedResponse, error)
|
ContainerAttach(ctx context.Context, container string, options types.ContainerAttachOptions) (types.HijackedResponse, error)
|
||||||
ContainerCommit(ctx context.Context, container string, options types.ContainerCommitOptions) (types.IDResponse, error)
|
ContainerCommit(ctx context.Context, container string, options types.ContainerCommitOptions) (types.IDResponse, error)
|
||||||
ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, containerName string) (container.ContainerCreateCreatedBody, error)
|
ContainerCreate(ctx context.Context, config *containertypes.Config, hostConfig *containertypes.HostConfig, networkingConfig *networktypes.NetworkingConfig, containerName string) (containertypes.ContainerCreateCreatedBody, error)
|
||||||
ContainerDiff(ctx context.Context, container string) ([]container.ContainerChangeResponseItem, error)
|
ContainerDiff(ctx context.Context, container string) ([]containertypes.ContainerChangeResponseItem, error)
|
||||||
ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error)
|
ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error)
|
||||||
ContainerExecCreate(ctx context.Context, container string, config types.ExecConfig) (types.IDResponse, error)
|
ContainerExecCreate(ctx context.Context, container string, config types.ExecConfig) (types.IDResponse, error)
|
||||||
ContainerExecInspect(ctx context.Context, execID string) (types.ContainerExecInspect, error)
|
ContainerExecInspect(ctx context.Context, execID string) (types.ContainerExecInspect, error)
|
||||||
|
@ -65,10 +65,10 @@ type ContainerAPIClient interface {
|
||||||
ContainerStats(ctx context.Context, container string, stream bool) (types.ContainerStats, error)
|
ContainerStats(ctx context.Context, container string, stream bool) (types.ContainerStats, error)
|
||||||
ContainerStart(ctx context.Context, container string, options types.ContainerStartOptions) error
|
ContainerStart(ctx context.Context, container string, options types.ContainerStartOptions) error
|
||||||
ContainerStop(ctx context.Context, container string, timeout *time.Duration) error
|
ContainerStop(ctx context.Context, container string, timeout *time.Duration) error
|
||||||
ContainerTop(ctx context.Context, container string, arguments []string) (container.ContainerTopOKBody, error)
|
ContainerTop(ctx context.Context, container string, arguments []string) (containertypes.ContainerTopOKBody, error)
|
||||||
ContainerUnpause(ctx context.Context, container string) error
|
ContainerUnpause(ctx context.Context, container string) error
|
||||||
ContainerUpdate(ctx context.Context, container string, updateConfig container.UpdateConfig) (container.ContainerUpdateOKBody, error)
|
ContainerUpdate(ctx context.Context, container string, updateConfig containertypes.UpdateConfig) (containertypes.ContainerUpdateOKBody, error)
|
||||||
ContainerWait(ctx context.Context, container string, condition container.WaitCondition) (<-chan container.ContainerWaitOKBody, <-chan error)
|
ContainerWait(ctx context.Context, container string, condition containertypes.WaitCondition) (<-chan containertypes.ContainerWaitOKBody, <-chan error)
|
||||||
CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error)
|
CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error)
|
||||||
CopyToContainer(ctx context.Context, container, path string, content io.Reader, options types.CopyToContainerOptions) error
|
CopyToContainer(ctx context.Context, container, path string, content io.Reader, options types.CopyToContainerOptions) error
|
||||||
ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error)
|
ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error)
|
||||||
|
@ -100,13 +100,13 @@ type ImageAPIClient interface {
|
||||||
|
|
||||||
// NetworkAPIClient defines API client methods for the networks
|
// NetworkAPIClient defines API client methods for the networks
|
||||||
type NetworkAPIClient interface {
|
type NetworkAPIClient interface {
|
||||||
NetworkConnect(ctx context.Context, networkID, container string, config *network.EndpointSettings) error
|
NetworkConnect(ctx context.Context, network, container string, config *networktypes.EndpointSettings) error
|
||||||
NetworkCreate(ctx context.Context, name string, options types.NetworkCreate) (types.NetworkCreateResponse, error)
|
NetworkCreate(ctx context.Context, name string, options types.NetworkCreate) (types.NetworkCreateResponse, error)
|
||||||
NetworkDisconnect(ctx context.Context, networkID, container string, force bool) error
|
NetworkDisconnect(ctx context.Context, network, container string, force bool) error
|
||||||
NetworkInspect(ctx context.Context, networkID string, options types.NetworkInspectOptions) (types.NetworkResource, error)
|
NetworkInspect(ctx context.Context, network string, options types.NetworkInspectOptions) (types.NetworkResource, error)
|
||||||
NetworkInspectWithRaw(ctx context.Context, networkID string, options types.NetworkInspectOptions) (types.NetworkResource, []byte, error)
|
NetworkInspectWithRaw(ctx context.Context, network string, options types.NetworkInspectOptions) (types.NetworkResource, []byte, error)
|
||||||
NetworkList(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error)
|
NetworkList(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error)
|
||||||
NetworkRemove(ctx context.Context, networkID string) error
|
NetworkRemove(ctx context.Context, network string) error
|
||||||
NetworksPrune(ctx context.Context, pruneFilter filters.Args) (types.NetworksPruneReport, error)
|
NetworksPrune(ctx context.Context, pruneFilter filters.Args) (types.NetworksPruneReport, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
package errdefs
|
||||||
|
|
||||||
|
// ErrNotFound signals that the requested object doesn't exist
|
||||||
|
type ErrNotFound interface {
|
||||||
|
NotFound()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrInvalidParameter signals that the user input is invalid
|
||||||
|
type ErrInvalidParameter interface {
|
||||||
|
InvalidParameter()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrConflict signals that some internal state conflicts with the requested action and can't be performed.
|
||||||
|
// A change in state should be able to clear this error.
|
||||||
|
type ErrConflict interface {
|
||||||
|
Conflict()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrUnauthorized is used to signify that the user is not authorized to perform a specific action
|
||||||
|
type ErrUnauthorized interface {
|
||||||
|
Unauthorized()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrUnavailable signals that the requested action/subsystem is not available.
|
||||||
|
type ErrUnavailable interface {
|
||||||
|
Unavailable()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrForbidden signals that the requested action cannot be performed under any circumstances.
|
||||||
|
// When a ErrForbidden is returned, the caller should never retry the action.
|
||||||
|
type ErrForbidden interface {
|
||||||
|
Forbidden()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrSystem signals that some internal error occurred.
|
||||||
|
// An example of this would be a failed mount request.
|
||||||
|
type ErrSystem interface {
|
||||||
|
ErrSystem()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrNotModified signals that an action can't be performed because it's already in the desired state
|
||||||
|
type ErrNotModified interface {
|
||||||
|
NotModified()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrAlreadyExists is a special case of ErrConflict which signals that the desired object already exists
|
||||||
|
type ErrAlreadyExists interface {
|
||||||
|
AlreadyExists()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrNotImplemented signals that the requested action/feature is not implemented on the system as configured.
|
||||||
|
type ErrNotImplemented interface {
|
||||||
|
NotImplemented()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrUnknown signals that the kind of error that occurred is not known.
|
||||||
|
type ErrUnknown interface {
|
||||||
|
Unknown()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrCancelled signals that the action was cancelled.
|
||||||
|
type ErrCancelled interface {
|
||||||
|
Cancelled()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrDeadline signals that the deadline was reached before the action completed.
|
||||||
|
type ErrDeadline interface {
|
||||||
|
DeadlineExceeded()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrDataLoss indicates that data was lost or there is data corruption.
|
||||||
|
type ErrDataLoss interface {
|
||||||
|
DataLoss()
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
// Package errdefs defines a set of error interfaces that packages should use for communicating classes of errors.
|
||||||
|
// Errors that cross the package boundary should implement one (and only one) of these interfaces.
|
||||||
|
//
|
||||||
|
// Packages should not reference these interfaces directly, only implement them.
|
||||||
|
// To check if a particular error implements one of these interfaces, there are helper
|
||||||
|
// functions provided (e.g. `Is<SomeError>`) which can be used rather than asserting the interfaces directly.
|
||||||
|
// If you must assert on these interfaces, be sure to check the causal chain (`err.Cause()`).
|
||||||
|
package errdefs
|
|
@ -0,0 +1,240 @@
|
||||||
|
package errdefs
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
type errNotFound struct{ error }
|
||||||
|
|
||||||
|
func (errNotFound) NotFound() {}
|
||||||
|
|
||||||
|
func (e errNotFound) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotFound is a helper to create an error of the class with the same name from any error type
|
||||||
|
func NotFound(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errNotFound{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errInvalidParameter struct{ error }
|
||||||
|
|
||||||
|
func (errInvalidParameter) InvalidParameter() {}
|
||||||
|
|
||||||
|
func (e errInvalidParameter) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// InvalidParameter is a helper to create an error of the class with the same name from any error type
|
||||||
|
func InvalidParameter(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errInvalidParameter{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errConflict struct{ error }
|
||||||
|
|
||||||
|
func (errConflict) Conflict() {}
|
||||||
|
|
||||||
|
func (e errConflict) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conflict is a helper to create an error of the class with the same name from any error type
|
||||||
|
func Conflict(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errConflict{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errUnauthorized struct{ error }
|
||||||
|
|
||||||
|
func (errUnauthorized) Unauthorized() {}
|
||||||
|
|
||||||
|
func (e errUnauthorized) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unauthorized is a helper to create an error of the class with the same name from any error type
|
||||||
|
func Unauthorized(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errUnauthorized{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errUnavailable struct{ error }
|
||||||
|
|
||||||
|
func (errUnavailable) Unavailable() {}
|
||||||
|
|
||||||
|
func (e errUnavailable) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unavailable is a helper to create an error of the class with the same name from any error type
|
||||||
|
func Unavailable(err error) error {
|
||||||
|
return errUnavailable{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errForbidden struct{ error }
|
||||||
|
|
||||||
|
func (errForbidden) Forbidden() {}
|
||||||
|
|
||||||
|
func (e errForbidden) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Forbidden is a helper to create an error of the class with the same name from any error type
|
||||||
|
func Forbidden(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errForbidden{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errSystem struct{ error }
|
||||||
|
|
||||||
|
func (errSystem) System() {}
|
||||||
|
|
||||||
|
func (e errSystem) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// System is a helper to create an error of the class with the same name from any error type
|
||||||
|
func System(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errSystem{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errNotModified struct{ error }
|
||||||
|
|
||||||
|
func (errNotModified) NotModified() {}
|
||||||
|
|
||||||
|
func (e errNotModified) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotModified is a helper to create an error of the class with the same name from any error type
|
||||||
|
func NotModified(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errNotModified{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errAlreadyExists struct{ error }
|
||||||
|
|
||||||
|
func (errAlreadyExists) AlreadyExists() {}
|
||||||
|
|
||||||
|
func (e errAlreadyExists) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// AlreadyExists is a helper to create an error of the class with the same name from any error type
|
||||||
|
func AlreadyExists(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errAlreadyExists{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errNotImplemented struct{ error }
|
||||||
|
|
||||||
|
func (errNotImplemented) NotImplemented() {}
|
||||||
|
|
||||||
|
func (e errNotImplemented) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotImplemented is a helper to create an error of the class with the same name from any error type
|
||||||
|
func NotImplemented(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errNotImplemented{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errUnknown struct{ error }
|
||||||
|
|
||||||
|
func (errUnknown) Unknown() {}
|
||||||
|
|
||||||
|
func (e errUnknown) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unknown is a helper to create an error of the class with the same name from any error type
|
||||||
|
func Unknown(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errUnknown{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errCancelled struct{ error }
|
||||||
|
|
||||||
|
func (errCancelled) Cancelled() {}
|
||||||
|
|
||||||
|
func (e errCancelled) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cancelled is a helper to create an error of the class with the same name from any error type
|
||||||
|
func Cancelled(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errCancelled{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errDeadline struct{ error }
|
||||||
|
|
||||||
|
func (errDeadline) DeadlineExceeded() {}
|
||||||
|
|
||||||
|
func (e errDeadline) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deadline is a helper to create an error of the class with the same name from any error type
|
||||||
|
func Deadline(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errDeadline{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
type errDataLoss struct{ error }
|
||||||
|
|
||||||
|
func (errDataLoss) DataLoss() {}
|
||||||
|
|
||||||
|
func (e errDataLoss) Cause() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
// DataLoss is a helper to create an error of the class with the same name from any error type
|
||||||
|
func DataLoss(err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errDataLoss{err}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromContext returns the error class from the passed in context
|
||||||
|
func FromContext(ctx context.Context) error {
|
||||||
|
e := ctx.Err()
|
||||||
|
if e == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if e == context.Canceled {
|
||||||
|
return Cancelled(e)
|
||||||
|
}
|
||||||
|
if e == context.DeadlineExceeded {
|
||||||
|
return Deadline(e)
|
||||||
|
}
|
||||||
|
return Unknown(e)
|
||||||
|
}
|
|
@ -0,0 +1,114 @@
|
||||||
|
package errdefs
|
||||||
|
|
||||||
|
type causer interface {
|
||||||
|
Cause() error
|
||||||
|
}
|
||||||
|
|
||||||
|
func getImplementer(err error) error {
|
||||||
|
switch e := err.(type) {
|
||||||
|
case
|
||||||
|
ErrNotFound,
|
||||||
|
ErrInvalidParameter,
|
||||||
|
ErrConflict,
|
||||||
|
ErrUnauthorized,
|
||||||
|
ErrUnavailable,
|
||||||
|
ErrForbidden,
|
||||||
|
ErrSystem,
|
||||||
|
ErrNotModified,
|
||||||
|
ErrAlreadyExists,
|
||||||
|
ErrNotImplemented,
|
||||||
|
ErrCancelled,
|
||||||
|
ErrDeadline,
|
||||||
|
ErrDataLoss,
|
||||||
|
ErrUnknown:
|
||||||
|
return e
|
||||||
|
case causer:
|
||||||
|
return getImplementer(e.Cause())
|
||||||
|
default:
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNotFound returns if the passed in error is an ErrNotFound
|
||||||
|
func IsNotFound(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrNotFound)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsInvalidParameter returns if the passed in error is an ErrInvalidParameter
|
||||||
|
func IsInvalidParameter(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrInvalidParameter)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsConflict returns if the passed in error is an ErrConflict
|
||||||
|
func IsConflict(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrConflict)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsUnauthorized returns if the the passed in error is an ErrUnauthorized
|
||||||
|
func IsUnauthorized(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrUnauthorized)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsUnavailable returns if the passed in error is an ErrUnavailable
|
||||||
|
func IsUnavailable(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrUnavailable)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsForbidden returns if the passed in error is an ErrForbidden
|
||||||
|
func IsForbidden(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrForbidden)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsSystem returns if the passed in error is an ErrSystem
|
||||||
|
func IsSystem(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrSystem)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNotModified returns if the passed in error is a NotModified error
|
||||||
|
func IsNotModified(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrNotModified)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsAlreadyExists returns if the passed in error is a AlreadyExists error
|
||||||
|
func IsAlreadyExists(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrAlreadyExists)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNotImplemented returns if the passed in error is an ErrNotImplemented
|
||||||
|
func IsNotImplemented(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrNotImplemented)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsUnknown returns if the passed in error is an ErrUnknown
|
||||||
|
func IsUnknown(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrUnknown)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsCancelled returns if the passed in error is an ErrCancelled
|
||||||
|
func IsCancelled(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrCancelled)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsDeadline returns if the passed in error is an ErrDeadline
|
||||||
|
func IsDeadline(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrDeadline)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsDataLoss returns if the passed in error is an ErrDataLoss
|
||||||
|
func IsDataLoss(err error) bool {
|
||||||
|
_, ok := getImplementer(err).(ErrDataLoss)
|
||||||
|
return ok
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"compress/bzip2"
|
"compress/bzip2"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
@ -13,6 +14,7 @@ import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
@ -24,6 +26,17 @@ import (
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var unpigzPath string
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if path, err := exec.LookPath("unpigz"); err != nil {
|
||||||
|
logrus.Debug("unpigz binary not found in PATH, falling back to go gzip library")
|
||||||
|
} else {
|
||||||
|
logrus.Debugf("Using unpigz binary found at path %s", path)
|
||||||
|
unpigzPath = path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
// Compression is the state represents if compressed or not.
|
// Compression is the state represents if compressed or not.
|
||||||
Compression int
|
Compression int
|
||||||
|
@ -136,10 +149,34 @@ func DetectCompression(source []byte) Compression {
|
||||||
return Uncompressed
|
return Uncompressed
|
||||||
}
|
}
|
||||||
|
|
||||||
func xzDecompress(archive io.Reader) (io.ReadCloser, <-chan struct{}, error) {
|
func xzDecompress(ctx context.Context, archive io.Reader) (io.ReadCloser, error) {
|
||||||
args := []string{"xz", "-d", "-c", "-q"}
|
args := []string{"xz", "-d", "-c", "-q"}
|
||||||
|
|
||||||
return cmdStream(exec.Command(args[0], args[1:]...), archive)
|
return cmdStream(exec.CommandContext(ctx, args[0], args[1:]...), archive)
|
||||||
|
}
|
||||||
|
|
||||||
|
func gzDecompress(ctx context.Context, buf io.Reader) (io.ReadCloser, error) {
|
||||||
|
if unpigzPath == "" {
|
||||||
|
return gzip.NewReader(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
disablePigzEnv := os.Getenv("MOBY_DISABLE_PIGZ")
|
||||||
|
if disablePigzEnv != "" {
|
||||||
|
if disablePigz, err := strconv.ParseBool(disablePigzEnv); err != nil {
|
||||||
|
return nil, err
|
||||||
|
} else if disablePigz {
|
||||||
|
return gzip.NewReader(buf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cmdStream(exec.CommandContext(ctx, unpigzPath, "-d", "-c"), buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
func wrapReadCloser(readBuf io.ReadCloser, cancel context.CancelFunc) io.ReadCloser {
|
||||||
|
return ioutils.NewReadCloserWrapper(readBuf, func() error {
|
||||||
|
cancel()
|
||||||
|
return readBuf.Close()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecompressStream decompresses the archive and returns a ReaderCloser with the decompressed archive.
|
// DecompressStream decompresses the archive and returns a ReaderCloser with the decompressed archive.
|
||||||
|
@ -163,26 +200,29 @@ func DecompressStream(archive io.Reader) (io.ReadCloser, error) {
|
||||||
readBufWrapper := p.NewReadCloserWrapper(buf, buf)
|
readBufWrapper := p.NewReadCloserWrapper(buf, buf)
|
||||||
return readBufWrapper, nil
|
return readBufWrapper, nil
|
||||||
case Gzip:
|
case Gzip:
|
||||||
gzReader, err := gzip.NewReader(buf)
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
|
||||||
|
gzReader, err := gzDecompress(ctx, buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
cancel()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
readBufWrapper := p.NewReadCloserWrapper(buf, gzReader)
|
readBufWrapper := p.NewReadCloserWrapper(buf, gzReader)
|
||||||
return readBufWrapper, nil
|
return wrapReadCloser(readBufWrapper, cancel), nil
|
||||||
case Bzip2:
|
case Bzip2:
|
||||||
bz2Reader := bzip2.NewReader(buf)
|
bz2Reader := bzip2.NewReader(buf)
|
||||||
readBufWrapper := p.NewReadCloserWrapper(buf, bz2Reader)
|
readBufWrapper := p.NewReadCloserWrapper(buf, bz2Reader)
|
||||||
return readBufWrapper, nil
|
return readBufWrapper, nil
|
||||||
case Xz:
|
case Xz:
|
||||||
xzReader, chdone, err := xzDecompress(buf)
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
|
||||||
|
xzReader, err := xzDecompress(ctx, buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
cancel()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
readBufWrapper := p.NewReadCloserWrapper(buf, xzReader)
|
readBufWrapper := p.NewReadCloserWrapper(buf, xzReader)
|
||||||
return ioutils.NewReadCloserWrapper(readBufWrapper, func() error {
|
return wrapReadCloser(readBufWrapper, cancel), nil
|
||||||
<-chdone
|
|
||||||
return readBufWrapper.Close()
|
|
||||||
}), nil
|
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("Unsupported compression format %s", (&compression).Extension())
|
return nil, fmt.Errorf("Unsupported compression format %s", (&compression).Extension())
|
||||||
}
|
}
|
||||||
|
@ -456,10 +496,16 @@ func (ta *tarAppender) addTarFile(path, name string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//check whether the file is overlayfs whiteout
|
||||||
|
//if yes, skip re-mapping container ID mappings.
|
||||||
|
isOverlayWhiteout := fi.Mode()&os.ModeCharDevice != 0 && hdr.Devmajor == 0 && hdr.Devminor == 0
|
||||||
|
|
||||||
//handle re-mapping container ID mappings back to host ID mappings before
|
//handle re-mapping container ID mappings back to host ID mappings before
|
||||||
//writing tar headers/files. We skip whiteout files because they were written
|
//writing tar headers/files. We skip whiteout files because they were written
|
||||||
//by the kernel and already have proper ownership relative to the host
|
//by the kernel and already have proper ownership relative to the host
|
||||||
if !strings.HasPrefix(filepath.Base(hdr.Name), WhiteoutPrefix) && !ta.IDMappings.Empty() {
|
if !isOverlayWhiteout &&
|
||||||
|
!strings.HasPrefix(filepath.Base(hdr.Name), WhiteoutPrefix) &&
|
||||||
|
!ta.IDMappings.Empty() {
|
||||||
fileIDPair, err := getFileUIDGID(fi.Sys())
|
fileIDPair, err := getFileUIDGID(fi.Sys())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -1157,8 +1203,7 @@ func remapIDs(idMappings *idtools.IDMappings, hdr *tar.Header) error {
|
||||||
// cmdStream executes a command, and returns its stdout as a stream.
|
// cmdStream executes a command, and returns its stdout as a stream.
|
||||||
// If the command fails to run or doesn't complete successfully, an error
|
// If the command fails to run or doesn't complete successfully, an error
|
||||||
// will be returned, including anything written on stderr.
|
// will be returned, including anything written on stderr.
|
||||||
func cmdStream(cmd *exec.Cmd, input io.Reader) (io.ReadCloser, <-chan struct{}, error) {
|
func cmdStream(cmd *exec.Cmd, input io.Reader) (io.ReadCloser, error) {
|
||||||
chdone := make(chan struct{})
|
|
||||||
cmd.Stdin = input
|
cmd.Stdin = input
|
||||||
pipeR, pipeW := io.Pipe()
|
pipeR, pipeW := io.Pipe()
|
||||||
cmd.Stdout = pipeW
|
cmd.Stdout = pipeW
|
||||||
|
@ -1167,7 +1212,7 @@ func cmdStream(cmd *exec.Cmd, input io.Reader) (io.ReadCloser, <-chan struct{},
|
||||||
|
|
||||||
// Run the command and return the pipe
|
// Run the command and return the pipe
|
||||||
if err := cmd.Start(); err != nil {
|
if err := cmd.Start(); err != nil {
|
||||||
return nil, nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy stdout to the returned pipe
|
// Copy stdout to the returned pipe
|
||||||
|
@ -1177,10 +1222,9 @@ func cmdStream(cmd *exec.Cmd, input io.Reader) (io.ReadCloser, <-chan struct{},
|
||||||
} else {
|
} else {
|
||||||
pipeW.Close()
|
pipeW.Close()
|
||||||
}
|
}
|
||||||
close(chdone)
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return pipeR, chdone, nil
|
return pipeR, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTempArchive reads the content of src into a temporary file, and returns the contents
|
// NewTempArchive reads the content of src into a temporary file, and returns the contents
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package archive
|
package archive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build linux
|
|
||||||
|
|
||||||
package homedir
|
package homedir
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package idtools
|
package idtools
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -8,18 +8,22 @@ import (
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
|
|
||||||
type readCloserWrapper struct {
|
// ReadCloserWrapper wraps an io.Reader, and implements an io.ReadCloser
|
||||||
|
// It calls the given callback function when closed. It should be constructed
|
||||||
|
// with NewReadCloserWrapper
|
||||||
|
type ReadCloserWrapper struct {
|
||||||
io.Reader
|
io.Reader
|
||||||
closer func() error
|
closer func() error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *readCloserWrapper) Close() error {
|
// Close calls back the passed closer function
|
||||||
|
func (r *ReadCloserWrapper) Close() error {
|
||||||
return r.closer()
|
return r.closer()
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewReadCloserWrapper returns a new io.ReadCloser.
|
// NewReadCloserWrapper returns a new io.ReadCloser.
|
||||||
func NewReadCloserWrapper(r io.Reader, closer func() error) io.ReadCloser {
|
func NewReadCloserWrapper(r io.Reader, closer func() error) io.ReadCloser {
|
||||||
return &readCloserWrapper{
|
return &ReadCloserWrapper{
|
||||||
Reader: r,
|
Reader: r,
|
||||||
closer: closer,
|
closer: closer,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package ioutils
|
package ioutils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build linux
|
|
||||||
|
|
||||||
package mount
|
package mount
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build linux
|
|
||||||
|
|
||||||
package mount
|
package mount
|
||||||
|
|
||||||
// MakeShared ensures a mounted filesystem has the SHARED mount option enabled.
|
// MakeShared ensures a mounted filesystem has the SHARED mount option enabled.
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package signal
|
package signal
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -27,9 +27,5 @@ func Chtimes(name string, atime time.Time, mtime time.Time) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Take platform specific action for setting create time.
|
// Take platform specific action for setting create time.
|
||||||
if err := setCTime(name, mtime); err != nil {
|
return setCTime(name, mtime)
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package system
|
package system
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -7,4 +7,7 @@ import (
|
||||||
var (
|
var (
|
||||||
// ErrNotSupportedPlatform means the platform is not supported.
|
// ErrNotSupportedPlatform means the platform is not supported.
|
||||||
ErrNotSupportedPlatform = errors.New("platform and architecture is not supported")
|
ErrNotSupportedPlatform = errors.New("platform and architecture is not supported")
|
||||||
|
|
||||||
|
// ErrNotSupportedOperatingSystem means the operating system is not supported.
|
||||||
|
ErrNotSupportedOperatingSystem = errors.New("operating system is not supported")
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package system
|
package system
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,17 +1,12 @@
|
||||||
package system
|
package system
|
||||||
|
|
||||||
import "os"
|
|
||||||
|
|
||||||
// lcowSupported determines if Linux Containers on Windows are supported.
|
// lcowSupported determines if Linux Containers on Windows are supported.
|
||||||
var lcowSupported = false
|
var lcowSupported = false
|
||||||
|
|
||||||
// InitLCOW sets whether LCOW is supported or not
|
// InitLCOW sets whether LCOW is supported or not
|
||||||
// TODO @jhowardmsft.
|
|
||||||
// 1. Replace with RS3 RTM build number.
|
|
||||||
// 2. Remove the getenv check when image-store is coalesced as shouldn't be needed anymore.
|
|
||||||
func InitLCOW(experimental bool) {
|
func InitLCOW(experimental bool) {
|
||||||
v := GetOSVersion()
|
v := GetOSVersion()
|
||||||
if experimental && v.Build > 16270 && os.Getenv("LCOW_SUPPORTED") != "" {
|
if experimental && v.Build >= 16299 {
|
||||||
lcowSupported = true
|
lcowSupported = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,3 +56,14 @@ func ParsePlatform(in string) *specs.Platform {
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsOSSupported determines if an operating system is supported by the host
|
||||||
|
func IsOSSupported(os string) bool {
|
||||||
|
if runtime.GOOS == os {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if LCOWSupported() && os == "linux" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package system
|
package system
|
||||||
|
|
||||||
// Mknod is not implemented on Windows.
|
// Mknod is not implemented on Windows.
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package system
|
package system
|
||||||
|
|
||||||
// Umask is not supported on the windows platform.
|
// Umask is not supported on the windows platform.
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package tarsum
|
package tarsum
|
||||||
|
|
||||||
import "sort"
|
import (
|
||||||
|
"runtime"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
// FileInfoSumInterface provides an interface for accessing file checksum
|
// FileInfoSumInterface provides an interface for accessing file checksum
|
||||||
// information within a tar file. This info is accessed through interface
|
// information within a tar file. This info is accessed through interface
|
||||||
|
@ -35,8 +39,11 @@ type FileInfoSums []FileInfoSumInterface
|
||||||
|
|
||||||
// GetFile returns the first FileInfoSumInterface with a matching name.
|
// GetFile returns the first FileInfoSumInterface with a matching name.
|
||||||
func (fis FileInfoSums) GetFile(name string) FileInfoSumInterface {
|
func (fis FileInfoSums) GetFile(name string) FileInfoSumInterface {
|
||||||
|
// We do case insensitive matching on Windows as c:\APP and c:\app are
|
||||||
|
// the same. See issue #33107.
|
||||||
for i := range fis {
|
for i := range fis {
|
||||||
if fis[i].Name() == name {
|
if (runtime.GOOS == "windows" && strings.EqualFold(fis[i].Name(), name)) ||
|
||||||
|
(runtime.GOOS != "windows" && fis[i].Name() == name) {
|
||||||
return fis[i]
|
return fis[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package term
|
package term
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
"github.com/docker/distribution/registry/client/transport"
|
"github.com/docker/distribution/registry/client/transport"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
registrytypes "github.com/docker/docker/api/types/registry"
|
registrytypes "github.com/docker/docker/api/types/registry"
|
||||||
|
"github.com/docker/docker/errdefs"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
@ -29,7 +30,7 @@ func loginV1(authConfig *types.AuthConfig, apiEndpoint APIEndpoint, userAgent st
|
||||||
logrus.Debugf("attempting v1 login to registry endpoint %s", serverAddress)
|
logrus.Debugf("attempting v1 login to registry endpoint %s", serverAddress)
|
||||||
|
|
||||||
if serverAddress == "" {
|
if serverAddress == "" {
|
||||||
return "", "", systemError{errors.New("server Error: Server Address not set")}
|
return "", "", errdefs.System(errors.New("server Error: Server Address not set"))
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err := http.NewRequest("GET", serverAddress+"users/", nil)
|
req, err := http.NewRequest("GET", serverAddress+"users/", nil)
|
||||||
|
@ -47,23 +48,23 @@ func loginV1(authConfig *types.AuthConfig, apiEndpoint APIEndpoint, userAgent st
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", systemError{err}
|
return "", "", errdefs.System(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch resp.StatusCode {
|
switch resp.StatusCode {
|
||||||
case http.StatusOK:
|
case http.StatusOK:
|
||||||
return "Login Succeeded", "", nil
|
return "Login Succeeded", "", nil
|
||||||
case http.StatusUnauthorized:
|
case http.StatusUnauthorized:
|
||||||
return "", "", unauthorizedError{errors.New("Wrong login/password, please try again")}
|
return "", "", errdefs.Unauthorized(errors.New("Wrong login/password, please try again"))
|
||||||
case http.StatusForbidden:
|
case http.StatusForbidden:
|
||||||
// *TODO: Use registry configuration to determine what this says, if anything?
|
// *TODO: Use registry configuration to determine what this says, if anything?
|
||||||
return "", "", notActivatedError{errors.Errorf("Login: Account is not active. Please see the documentation of the registry %s for instructions how to activate it.", serverAddress)}
|
return "", "", errdefs.Forbidden(errors.Errorf("Login: Account is not active. Please see the documentation of the registry %s for instructions how to activate it.", serverAddress))
|
||||||
case http.StatusInternalServerError:
|
case http.StatusInternalServerError:
|
||||||
logrus.Errorf("%s returned status code %d. Response Body :\n%s", req.URL.String(), resp.StatusCode, body)
|
logrus.Errorf("%s returned status code %d. Response Body :\n%s", req.URL.String(), resp.StatusCode, body)
|
||||||
return "", "", systemError{errors.New("Internal Server Error")}
|
return "", "", errdefs.System(errors.New("Internal Server Error"))
|
||||||
}
|
}
|
||||||
return "", "", systemError{errors.Errorf("Login: %s (Code: %d; Headers: %s)", body,
|
return "", "", errdefs.System(errors.Errorf("Login: %s (Code: %d; Headers: %s)", body,
|
||||||
resp.StatusCode, resp.Header)}
|
resp.StatusCode, resp.Header))
|
||||||
}
|
}
|
||||||
|
|
||||||
type loginCredentialStore struct {
|
type loginCredentialStore struct {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/docker/distribution/registry/api/errcode"
|
"github.com/docker/distribution/registry/api/errcode"
|
||||||
|
"github.com/docker/docker/errdefs"
|
||||||
)
|
)
|
||||||
|
|
||||||
type notFoundError string
|
type notFoundError string
|
||||||
|
@ -14,62 +15,6 @@ func (e notFoundError) Error() string {
|
||||||
|
|
||||||
func (notFoundError) NotFound() {}
|
func (notFoundError) NotFound() {}
|
||||||
|
|
||||||
type validationError struct {
|
|
||||||
cause error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e validationError) Error() string {
|
|
||||||
return e.cause.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e validationError) InvalidParameter() {}
|
|
||||||
|
|
||||||
func (e validationError) Cause() error {
|
|
||||||
return e.cause
|
|
||||||
}
|
|
||||||
|
|
||||||
type unauthorizedError struct {
|
|
||||||
cause error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e unauthorizedError) Error() string {
|
|
||||||
return e.cause.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e unauthorizedError) Unauthorized() {}
|
|
||||||
|
|
||||||
func (e unauthorizedError) Cause() error {
|
|
||||||
return e.cause
|
|
||||||
}
|
|
||||||
|
|
||||||
type systemError struct {
|
|
||||||
cause error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e systemError) Error() string {
|
|
||||||
return e.cause.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e systemError) SystemError() {}
|
|
||||||
|
|
||||||
func (e systemError) Cause() error {
|
|
||||||
return e.cause
|
|
||||||
}
|
|
||||||
|
|
||||||
type notActivatedError struct {
|
|
||||||
cause error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e notActivatedError) Error() string {
|
|
||||||
return e.cause.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e notActivatedError) Forbidden() {}
|
|
||||||
|
|
||||||
func (e notActivatedError) Cause() error {
|
|
||||||
return e.cause
|
|
||||||
}
|
|
||||||
|
|
||||||
func translateV2AuthError(err error) error {
|
func translateV2AuthError(err error) error {
|
||||||
switch e := err.(type) {
|
switch e := err.(type) {
|
||||||
case *url.Error:
|
case *url.Error:
|
||||||
|
@ -77,7 +22,7 @@ func translateV2AuthError(err error) error {
|
||||||
case errcode.Error:
|
case errcode.Error:
|
||||||
switch e2.Code {
|
switch e2.Code {
|
||||||
case errcode.ErrorCodeUnauthorized:
|
case errcode.ErrorCodeUnauthorized:
|
||||||
return unauthorizedError{err}
|
return errdefs.Unauthorized(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import (
|
||||||
"github.com/docker/distribution/registry/client/auth"
|
"github.com/docker/distribution/registry/client/auth"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
registrytypes "github.com/docker/docker/api/types/registry"
|
registrytypes "github.com/docker/docker/api/types/registry"
|
||||||
|
"github.com/docker/docker/errdefs"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
@ -117,12 +118,12 @@ func (s *DefaultService) Auth(ctx context.Context, authConfig *types.AuthConfig,
|
||||||
}
|
}
|
||||||
u, err := url.Parse(serverAddress)
|
u, err := url.Parse(serverAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", validationError{errors.Errorf("unable to parse server address: %v", err)}
|
return "", "", errdefs.InvalidParameter(errors.Errorf("unable to parse server address: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoints, err := s.LookupPushEndpoints(u.Host)
|
endpoints, err := s.LookupPushEndpoints(u.Host)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", validationError{err}
|
return "", "", errdefs.InvalidParameter(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, endpoint := range endpoints {
|
for _, endpoint := range endpoints {
|
||||||
|
|
|
@ -21,6 +21,7 @@ import (
|
||||||
"github.com/docker/distribution/registry/api/errcode"
|
"github.com/docker/distribution/registry/api/errcode"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
registrytypes "github.com/docker/docker/api/types/registry"
|
registrytypes "github.com/docker/docker/api/types/registry"
|
||||||
|
"github.com/docker/docker/errdefs"
|
||||||
"github.com/docker/docker/pkg/ioutils"
|
"github.com/docker/docker/pkg/ioutils"
|
||||||
"github.com/docker/docker/pkg/jsonmessage"
|
"github.com/docker/docker/pkg/jsonmessage"
|
||||||
"github.com/docker/docker/pkg/stringid"
|
"github.com/docker/docker/pkg/stringid"
|
||||||
|
@ -734,20 +735,20 @@ func shouldRedirect(response *http.Response) bool {
|
||||||
// SearchRepositories performs a search against the remote repository
|
// SearchRepositories performs a search against the remote repository
|
||||||
func (r *Session) SearchRepositories(term string, limit int) (*registrytypes.SearchResults, error) {
|
func (r *Session) SearchRepositories(term string, limit int) (*registrytypes.SearchResults, error) {
|
||||||
if limit < 1 || limit > 100 {
|
if limit < 1 || limit > 100 {
|
||||||
return nil, validationError{errors.Errorf("Limit %d is outside the range of [1, 100]", limit)}
|
return nil, errdefs.InvalidParameter(errors.Errorf("Limit %d is outside the range of [1, 100]", limit))
|
||||||
}
|
}
|
||||||
logrus.Debugf("Index server: %s", r.indexEndpoint)
|
logrus.Debugf("Index server: %s", r.indexEndpoint)
|
||||||
u := r.indexEndpoint.String() + "search?q=" + url.QueryEscape(term) + "&n=" + url.QueryEscape(fmt.Sprintf("%d", limit))
|
u := r.indexEndpoint.String() + "search?q=" + url.QueryEscape(term) + "&n=" + url.QueryEscape(fmt.Sprintf("%d", limit))
|
||||||
|
|
||||||
req, err := http.NewRequest("GET", u, nil)
|
req, err := http.NewRequest("GET", u, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(validationError{err}, "Error building request")
|
return nil, errors.Wrap(errdefs.InvalidParameter(err), "Error building request")
|
||||||
}
|
}
|
||||||
// Have the AuthTransport send authentication, when logged in.
|
// Have the AuthTransport send authentication, when logged in.
|
||||||
req.Header.Set("X-Docker-Token", "true")
|
req.Header.Set("X-Docker-Token", "true")
|
||||||
res, err := r.client.Do(req)
|
res, err := r.client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, systemError{err}
|
return nil, errdefs.System(err)
|
||||||
}
|
}
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
if res.StatusCode != 200 {
|
if res.StatusCode != 200 {
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
# the following lines are in sorted order, FYI
|
# the following lines are in sorted order, FYI
|
||||||
github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109
|
github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109
|
||||||
github.com/Microsoft/hcsshim v0.6.7
|
github.com/Microsoft/hcsshim v0.6.8
|
||||||
github.com/Microsoft/go-winio v0.4.5
|
github.com/Microsoft/go-winio v0.4.6
|
||||||
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
|
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
|
||||||
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
|
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
|
||||||
github.com/go-check/check 4ed411733c5785b40214c70bce814c3a3a689609 https://github.com/cpuguy83/check.git
|
github.com/go-check/check 4ed411733c5785b40214c70bce814c3a3a689609 https://github.com/cpuguy83/check.git
|
||||||
github.com/gorilla/context v1.1
|
github.com/gorilla/context v1.1
|
||||||
github.com/gorilla/mux v1.1
|
github.com/gorilla/mux v1.1
|
||||||
github.com/Microsoft/opengcs v0.3.4
|
github.com/Microsoft/opengcs v0.3.5
|
||||||
github.com/kr/pty 5cf931ef8f
|
github.com/kr/pty 5cf931ef8f
|
||||||
github.com/mattn/go-shellwords v1.0.3
|
github.com/mattn/go-shellwords v1.0.3
|
||||||
github.com/sirupsen/logrus v1.0.3
|
github.com/sirupsen/logrus v1.0.3
|
||||||
|
@ -20,7 +20,8 @@ github.com/docker/go-connections 3ede32e2033de7505e6500d6c868c2b9ed9f169d
|
||||||
golang.org/x/text f72d8390a633d5dfb0cc84043294db9f6c935756
|
golang.org/x/text f72d8390a633d5dfb0cc84043294db9f6c935756
|
||||||
github.com/stretchr/testify 4d4bfba8f1d1027c4fdbe371823030df51419987
|
github.com/stretchr/testify 4d4bfba8f1d1027c4fdbe371823030df51419987
|
||||||
github.com/pmezard/go-difflib v1.0.0
|
github.com/pmezard/go-difflib v1.0.0
|
||||||
github.com/gotestyourself/gotestyourself v1.1.0
|
github.com/gotestyourself/gotestyourself 511344eed30e4384f010579a593dfb442033a692
|
||||||
|
github.com/google/go-cmp v0.1.0
|
||||||
|
|
||||||
github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5
|
github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5
|
||||||
github.com/imdario/mergo 0.2.1
|
github.com/imdario/mergo 0.2.1
|
||||||
|
@ -30,7 +31,7 @@ github.com/moby/buildkit aaff9d591ef128560018433fe61beb802e149de8
|
||||||
github.com/tonistiigi/fsutil dea3a0da73aee887fc02142d995be764106ac5e2
|
github.com/tonistiigi/fsutil dea3a0da73aee887fc02142d995be764106ac5e2
|
||||||
|
|
||||||
#get libnetwork packages
|
#get libnetwork packages
|
||||||
github.com/docker/libnetwork 9bca9a4a220b158cc94402e0f8c2c7714eb6f503
|
github.com/docker/libnetwork 315a076a4e9ded2abc950318c71d5f1637547977
|
||||||
github.com/docker/go-events 9461782956ad83b30282bf90e31fa6a70c255ba9
|
github.com/docker/go-events 9461782956ad83b30282bf90e31fa6a70c255ba9
|
||||||
github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80
|
github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80
|
||||||
github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
|
github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
|
||||||
|
@ -65,9 +66,9 @@ github.com/pborman/uuid v1.0
|
||||||
google.golang.org/grpc v1.3.0
|
google.golang.org/grpc v1.3.0
|
||||||
|
|
||||||
# When updating, also update RUNC_COMMIT in hack/dockerfile/binaries-commits accordingly
|
# When updating, also update RUNC_COMMIT in hack/dockerfile/binaries-commits accordingly
|
||||||
github.com/opencontainers/runc b2567b37d7b75eb4cf325b77297b140ea686ce8f
|
github.com/opencontainers/runc 9f9c96235cc97674e935002fc3d78361b696a69e
|
||||||
github.com/opencontainers/runtime-spec v1.0.0
|
github.com/opencontainers/runtime-spec v1.0.1
|
||||||
github.com/opencontainers/image-spec v1.0.0
|
github.com/opencontainers/image-spec v1.0.1
|
||||||
github.com/seccomp/libseccomp-golang 32f571b70023028bd57d9288c20efbcb237f3ce0
|
github.com/seccomp/libseccomp-golang 32f571b70023028bd57d9288c20efbcb237f3ce0
|
||||||
|
|
||||||
# libcontainer deps (see src/github.com/opencontainers/runc/Godeps/Godeps.json)
|
# libcontainer deps (see src/github.com/opencontainers/runc/Godeps/Godeps.json)
|
||||||
|
@ -77,7 +78,7 @@ github.com/syndtr/gocapability 2c00daeb6c3b45114c80ac44119e7b8801fdd852
|
||||||
github.com/golang/protobuf 7a211bcf3bce0e3f1d74f9894916e6f116ae83b4
|
github.com/golang/protobuf 7a211bcf3bce0e3f1d74f9894916e6f116ae83b4
|
||||||
|
|
||||||
# gelf logging driver deps
|
# gelf logging driver deps
|
||||||
github.com/Graylog2/go-gelf v2
|
github.com/Graylog2/go-gelf 4143646226541087117ff2f83334ea48b3201841
|
||||||
|
|
||||||
github.com/fluent/fluent-logger-golang v1.3.0
|
github.com/fluent/fluent-logger-golang v1.3.0
|
||||||
# fluent-logger-golang deps
|
# fluent-logger-golang deps
|
||||||
|
@ -88,8 +89,8 @@ github.com/tinylib/msgp 3b556c64540842d4f82967be066a7f7fffc3adad
|
||||||
github.com/fsnotify/fsnotify 4da3e2cfbabc9f751898f250b49f2439785783a1
|
github.com/fsnotify/fsnotify 4da3e2cfbabc9f751898f250b49f2439785783a1
|
||||||
|
|
||||||
# awslogs deps
|
# awslogs deps
|
||||||
github.com/aws/aws-sdk-go v1.4.22
|
github.com/aws/aws-sdk-go v1.12.66
|
||||||
github.com/go-ini/ini 060d7da055ba6ec5ea7a31f116332fe5efa04ce0
|
github.com/go-ini/ini v1.25.4
|
||||||
github.com/jmespath/go-jmespath 0b12d6b521d83fc7f755e7cfc1b1fbdd35a01a74
|
github.com/jmespath/go-jmespath 0b12d6b521d83fc7f755e7cfc1b1fbdd35a01a74
|
||||||
|
|
||||||
# logentries
|
# logentries
|
||||||
|
@ -103,7 +104,7 @@ github.com/googleapis/gax-go da06d194a00e19ce00d9011a13931c3f6f6887c7
|
||||||
google.golang.org/genproto d80a6e20e776b0b17a324d0ba1ab50a39c8e8944
|
google.golang.org/genproto d80a6e20e776b0b17a324d0ba1ab50a39c8e8944
|
||||||
|
|
||||||
# containerd
|
# containerd
|
||||||
github.com/containerd/containerd v1.0.0
|
github.com/containerd/containerd 3fa104f843ec92328912e042b767d26825f202aa
|
||||||
github.com/containerd/fifo fbfb6a11ec671efbe94ad1c12c2e98773f19e1e6
|
github.com/containerd/fifo fbfb6a11ec671efbe94ad1c12c2e98773f19e1e6
|
||||||
github.com/containerd/continuity 35d55c5e8dd23b32037d56cf97174aff3efdfa83
|
github.com/containerd/continuity 35d55c5e8dd23b32037d56cf97174aff3efdfa83
|
||||||
github.com/containerd/cgroups 29da22c6171a4316169f9205ab6c49f59b5b852f
|
github.com/containerd/cgroups 29da22c6171a4316169f9205ab6c49f59b5b852f
|
||||||
|
@ -114,7 +115,7 @@ github.com/dmcgowan/go-tar go1.10
|
||||||
github.com/stevvooe/ttrpc 76e68349ad9ab4d03d764c713826d31216715e4f
|
github.com/stevvooe/ttrpc 76e68349ad9ab4d03d764c713826d31216715e4f
|
||||||
|
|
||||||
# cluster
|
# cluster
|
||||||
github.com/docker/swarmkit de950a7ed842c7b7e47e9451cde9bf8f96031894
|
github.com/docker/swarmkit 713d79dc8799b33465c58ed120b870c52eb5eb4f
|
||||||
github.com/gogo/protobuf v0.4
|
github.com/gogo/protobuf v0.4
|
||||||
github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a
|
github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a
|
||||||
github.com/google/certificate-transparency d90e65c3a07988180c5b1ece71791c0b6506826e
|
github.com/google/certificate-transparency d90e65c3a07988180c5b1ece71791c0b6506826e
|
||||||
|
@ -148,7 +149,7 @@ github.com/opencontainers/selinux b29023b86e4a69d1b46b7e7b4e2b6fda03f0b9cd
|
||||||
# archive/tar
|
# archive/tar
|
||||||
# mkdir -p ./vendor/archive
|
# mkdir -p ./vendor/archive
|
||||||
# git clone git://github.com/tonistiigi/go-1.git ./go
|
# git clone git://github.com/tonistiigi/go-1.git ./go
|
||||||
# git --git-dir ./go/.git --work-tree ./go checkout revert-prefix-ignore
|
# git --git-dir ./go/.git --work-tree ./go checkout revert-prefix-ignore-1.9
|
||||||
# cp -a go/src/archive/tar ./vendor/archive/tar
|
# cp -a go/src/archive/tar ./vendor/archive/tar
|
||||||
# rm -rf ./go
|
# rm -rf ./go
|
||||||
# vndr
|
# vndr
|
||||||
|
|
Loading…
Reference in New Issue