diff --git a/vendor/github.com/containers/image/README.md b/vendor/github.com/containers/image/README.md new file mode 100644 index 00000000..8e812bb7 --- /dev/null +++ b/vendor/github.com/containers/image/README.md @@ -0,0 +1,80 @@ +[![GoDoc](https://godoc.org/github.com/containers/image?status.svg)](https://godoc.org/github.com/containers/image) [![Build Status](https://travis-ci.org/containers/image.svg?branch=master)](https://travis-ci.org/containers/image) += + +`image` is a set of Go libraries aimed at working in various way with +containers' images and container image registries. + +The containers/image library allows application to pull and push images from +container image registries, like the upstream docker registry. It also +implements "simple image signing". + +The containers/image library also allows you to inspect a repository on a +container registry without pulling down the image. This means it fetches the +repository's manifest and it is able to show you a `docker inspect`-like json +output about a whole repository or a tag. This library, in contrast to `docker +inspect`, helps you gather useful information about a repository or a tag +without requiring you to run `docker pull`. + +The containers/image library also allows you to translate from one image format +to another, for example docker container images to OCI images. It also allows +you to copy container images between various registries, possibly converting +them as necessary, and to sign and verify images. + +## Command-line usage + +The containers/image project is only a library with no user interface; +you can either incorporate it into your Go programs, or use the `skopeo` tool: + +The [skopeo](https://github.com/projectatomic/skopeo) tool uses the +containers/image library and takes advantage of many of its features, +e.g. `skopeo copy` exposes the `containers/image/copy.Image` functionality. + +## Dependencies + +This library does not ship a committed version of its dependencies in a `vendor` +subdirectory. This is so you can make well-informed decisions about which +libraries you should use with this package in your own projects, and because +types defined in the `vendor` directory would be impossible to use from your projects. + +What this project tests against dependencies-wise is located +[in vendor.conf](https://github.com/containers/image/blob/master/vendor.conf). + +## Building + +If you want to see what the library can do, or an example of how it is called, +consider starting with the [skopeo](https://github.com/projectatomic/skopeo) tool +instead. + +To integrate this library into your project, put it into `$GOPATH` or use +your preferred vendoring tool to include a copy in your project. +Ensure that the dependencies documented [in vendor.conf](https://github.com/containers/image/blob/master/vendor.conf) +are also available +(using those exact versions or different versions of your choosing). + +This library, by default, also depends on the GpgME and libostree C libraries. Either install them: +```sh +Fedora$ dnf install gpgme-devel libassuan-devel libostree-devel +macOS$ brew install gpgme +``` +or use the build tags described below to avoid the dependencies (e.g. using `go build -tags …`) + +### Supported build tags + +- `containers_image_openpgp`: Use a Golang-only OpenPGP implementation for signature verification instead of the default cgo/gpgme-based implementation; +the primary downside is that creating new signatures with the Golang-only implementation is not supported. +- `containers_image_ostree_stub`: Instead of importing `ostree:` transport in `github.com/containers/image/transports/alltransports`, use a stub which reports that the transport is not supported. This allows building the library without requiring the `libostree` development libraries. + + (Note that explicitly importing `github.com/containers/image/ostree` will still depend on the `libostree` library, this build tag only affects generic users of …`/alltransports`.) + +## Contributing + +When developing this library, please use `make` (or `make … BUILDTAGS=…`) to take advantage of the tests and validation. + +## License + +ASL 2.0 + +## Contact + +- Mailing list: [containers-dev](https://groups.google.com/forum/?hl=en#!forum/containers-dev) +- IRC: #[container-projects](irc://irc.freenode.net:6667/#container-projects) on freenode.net diff --git a/vendor/github.com/containers/image/docker/docker_client.go b/vendor/github.com/containers/image/docker/docker_client.go index b9897703..85e3b3b2 100644 --- a/vendor/github.com/containers/image/docker/docker_client.go +++ b/vendor/github.com/containers/image/docker/docker_client.go @@ -308,31 +308,33 @@ func (c *dockerClient) setupRequestAuth(req *http.Request) error { if len(c.challenges) == 0 { return nil } - // assume just one... - challenge := c.challenges[0] - switch challenge.Scheme { - case "basic": - req.SetBasicAuth(c.username, c.password) - return nil - case "bearer": - if c.token == nil || time.Now().After(c.tokenExpiration) { - realm, ok := challenge.Parameters["realm"] - if !ok { - return errors.Errorf("missing realm in bearer auth challenge") + for _, challenge := range c.challenges { + switch challenge.Scheme { + case "basic": + req.SetBasicAuth(c.username, c.password) + return nil + case "bearer": + if c.token == nil || time.Now().After(c.tokenExpiration) { + realm, ok := challenge.Parameters["realm"] + if !ok { + return errors.Errorf("missing realm in bearer auth challenge") + } + service, _ := challenge.Parameters["service"] // Will be "" if not present + scope := fmt.Sprintf("repository:%s:%s", c.scope.remoteName, c.scope.actions) + token, err := c.getBearerToken(realm, service, scope) + if err != nil { + return err + } + c.token = token + c.tokenExpiration = token.IssuedAt.Add(time.Duration(token.ExpiresIn) * time.Second) } - service, _ := challenge.Parameters["service"] // Will be "" if not present - scope := fmt.Sprintf("repository:%s:%s", c.scope.remoteName, c.scope.actions) - token, err := c.getBearerToken(realm, service, scope) - if err != nil { - return err - } - c.token = token - c.tokenExpiration = token.IssuedAt.Add(time.Duration(token.ExpiresIn) * time.Second) + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", c.token.Token)) + return nil + default: + logrus.Debugf("no handler for %s authentication", challenge.Scheme) } - req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", c.token.Token)) - return nil } - return errors.Errorf("no handler for %s authentication", challenge.Scheme) + return nil } func (c *dockerClient) getBearerToken(realm, service, scope string) (*bearerToken, error) { diff --git a/vendor/github.com/containers/image/docker/reference/README.md b/vendor/github.com/containers/image/docker/reference/README.md new file mode 100644 index 00000000..53a88de8 --- /dev/null +++ b/vendor/github.com/containers/image/docker/reference/README.md @@ -0,0 +1,2 @@ +This is a copy of github.com/docker/distribution/reference as of commit fb0bebc4b64e3881cc52a2478d749845ed76d2a8, +except that ParseAnyReferenceWithSet has been removed to drop the dependency on github.com/docker/distribution/digestset. \ No newline at end of file diff --git a/vendor/github.com/containers/image/image/docker_list.go b/vendor/github.com/containers/image/image/docker_list.go index 47679415..c79adacc 100644 --- a/vendor/github.com/containers/image/image/docker_list.go +++ b/vendor/github.com/containers/image/image/docker_list.go @@ -16,7 +16,7 @@ type platformSpec struct { OSVersion string `json:"os.version,omitempty"` OSFeatures []string `json:"os.features,omitempty"` Variant string `json:"variant,omitempty"` - Features []string `json:"features,omitempty"` + Features []string `json:"features,omitempty"` // removed in OCI } // A manifestDescriptor references a platform-specific manifest. diff --git a/vendor/github.com/containers/image/image/docker_schema2.go b/vendor/github.com/containers/image/image/docker_schema2.go index a2a36ea2..9c242cf0 100644 --- a/vendor/github.com/containers/image/image/docker_schema2.go +++ b/vendor/github.com/containers/image/image/docker_schema2.go @@ -183,6 +183,7 @@ func (m *manifestSchema2) UpdatedImage(options types.ManifestUpdateOptions) (typ } copy.LayersDescriptors = make([]descriptor, len(options.LayerInfos)) for i, info := range options.LayerInfos { + copy.LayersDescriptors[i].MediaType = m.LayersDescriptors[i].MediaType copy.LayersDescriptors[i].Digest = info.Digest copy.LayersDescriptors[i].Size = info.Size copy.LayersDescriptors[i].URLs = info.URLs @@ -213,15 +214,17 @@ func (m *manifestSchema2) convertToManifestOCI1() (types.Image, error) { return nil, err } - config := descriptor{ - MediaType: imgspecv1.MediaTypeImageConfig, - Size: int64(len(configOCIBytes)), - Digest: digest.FromBytes(configOCIBytes), + config := descriptorOCI1{ + descriptor: descriptor{ + MediaType: imgspecv1.MediaTypeImageConfig, + Size: int64(len(configOCIBytes)), + Digest: digest.FromBytes(configOCIBytes), + }, } - layers := make([]descriptor, len(m.LayersDescriptors)) + layers := make([]descriptorOCI1, len(m.LayersDescriptors)) for idx := range layers { - layers[idx] = m.LayersDescriptors[idx] + layers[idx] = descriptorOCI1{descriptor: m.LayersDescriptors[idx]} if m.LayersDescriptors[idx].MediaType == manifest.DockerV2Schema2ForeignLayerMediaType { layers[idx].MediaType = imgspecv1.MediaTypeImageLayerNonDistributable } else { diff --git a/vendor/github.com/containers/image/image/oci.go b/vendor/github.com/containers/image/image/oci.go index 2575d1e0..048387ec 100644 --- a/vendor/github.com/containers/image/image/oci.go +++ b/vendor/github.com/containers/image/image/oci.go @@ -12,12 +12,18 @@ import ( "github.com/pkg/errors" ) +type descriptorOCI1 struct { + descriptor + Annotations map[string]string `json:"annotations,omitempty"` +} + type manifestOCI1 struct { src types.ImageSource // May be nil if configBlob is not nil configBlob []byte // If set, corresponds to contents of ConfigDescriptor. SchemaVersion int `json:"schemaVersion"` - ConfigDescriptor descriptor `json:"config"` - LayersDescriptors []descriptor `json:"layers"` + ConfigDescriptor descriptorOCI1 `json:"config"` + LayersDescriptors []descriptorOCI1 `json:"layers"` + Annotations map[string]string `json:"annotations,omitempty"` } func manifestOCI1FromManifest(src types.ImageSource, manifest []byte) (genericManifest, error) { @@ -29,7 +35,7 @@ func manifestOCI1FromManifest(src types.ImageSource, manifest []byte) (genericMa } // manifestOCI1FromComponents builds a new manifestOCI1 from the supplied data: -func manifestOCI1FromComponents(config descriptor, src types.ImageSource, configBlob []byte, layers []descriptor) genericManifest { +func manifestOCI1FromComponents(config descriptorOCI1, src types.ImageSource, configBlob []byte, layers []descriptorOCI1) genericManifest { return &manifestOCI1{ src: src, configBlob: configBlob, @@ -148,8 +154,9 @@ func (m *manifestOCI1) UpdatedImage(options types.ManifestUpdateOptions) (types. if len(copy.LayersDescriptors) != len(options.LayerInfos) { return nil, errors.Errorf("Error preparing updated manifest: layer count changed from %d to %d", len(copy.LayersDescriptors), len(options.LayerInfos)) } - copy.LayersDescriptors = make([]descriptor, len(options.LayerInfos)) + copy.LayersDescriptors = make([]descriptorOCI1, len(options.LayerInfos)) for i, info := range options.LayerInfos { + copy.LayersDescriptors[i].MediaType = m.LayersDescriptors[i].MediaType copy.LayersDescriptors[i].Digest = info.Digest copy.LayersDescriptors[i].Size = info.Size } @@ -169,7 +176,7 @@ func (m *manifestOCI1) UpdatedImage(options types.ManifestUpdateOptions) (types. func (m *manifestOCI1) convertToManifestSchema2() (types.Image, error) { // Create a copy of the descriptor. - config := m.ConfigDescriptor + config := m.ConfigDescriptor.descriptor // The only difference between OCI and DockerSchema2 is the mediatypes. The // media type of the manifest is handled by manifestSchema2FromComponents. @@ -177,7 +184,7 @@ func (m *manifestOCI1) convertToManifestSchema2() (types.Image, error) { layers := make([]descriptor, len(m.LayersDescriptors)) for idx := range layers { - layers[idx] = m.LayersDescriptors[idx] + layers[idx] = m.LayersDescriptors[idx].descriptor layers[idx].MediaType = manifest.DockerV2Schema2LayerMediaType } diff --git a/vendor/github.com/containers/image/pkg/strslice/README.md b/vendor/github.com/containers/image/pkg/strslice/README.md new file mode 100644 index 00000000..ae6097e8 --- /dev/null +++ b/vendor/github.com/containers/image/pkg/strslice/README.md @@ -0,0 +1 @@ +This package was replicated from [github.com/docker/docker v17.04.0-ce](https://github.com/docker/docker/tree/v17.04.0-ce/api/types/strslice). diff --git a/vendor/github.com/containers/image/storage/storage_image.go b/vendor/github.com/containers/image/storage/storage_image.go index 5b9e6e20..8b708bdf 100644 --- a/vendor/github.com/containers/image/storage/storage_image.go +++ b/vendor/github.com/containers/image/storage/storage_image.go @@ -174,11 +174,11 @@ func (s *storageImageDestination) putBlob(stream io.Reader, blobinfo types.BlobI } // Attempt to create the identified layer and import its contents. layer, uncompressedSize, err := s.imageRef.transport.store.PutLayer(id, parentLayer, nil, "", true, multi) - if err != nil && err != storage.ErrDuplicateID { + if err != nil && errors.Cause(err) != storage.ErrDuplicateID { logrus.Debugf("error importing layer blob %q as %q: %v", blobinfo.Digest, id, err) return errorBlobInfo, err } - if err == storage.ErrDuplicateID { + if errors.Cause(err) == storage.ErrDuplicateID { // We specified an ID, and there's already a layer with // the same ID. Drain the input so that we can look at // its length and digest. @@ -291,7 +291,7 @@ func (s *storageImageDestination) PutBlob(stream io.Reader, blobinfo types.BlobI // it returns a non-nil error only on an unexpected failure. func (s *storageImageDestination) HasBlob(blobinfo types.BlobInfo) (bool, int64, error) { if blobinfo.Digest == "" { - return false, -1, errors.Errorf(`"Can not check for a blob with unknown digest`) + return false, -1, errors.Errorf(`Can not check for a blob with unknown digest`) } for _, blob := range s.BlobList { if blob.Digest == blobinfo.Digest { @@ -331,7 +331,7 @@ func (s *storageImageDestination) Commit() error { } img, err := s.imageRef.transport.store.CreateImage(s.ID, nil, lastLayer, "", nil) if err != nil { - if err != storage.ErrDuplicateID { + if errors.Cause(err) != storage.ErrDuplicateID { logrus.Debugf("error creating image: %q", err) return errors.Wrapf(err, "error creating image %q", s.ID) } @@ -340,8 +340,8 @@ func (s *storageImageDestination) Commit() error { return errors.Wrapf(err, "error reading image %q", s.ID) } if img.TopLayer != lastLayer { - logrus.Debugf("error creating image: image with ID %q exists, but uses different layers", err) - return errors.Wrapf(err, "image with ID %q already exists, but uses a different top layer", s.ID) + logrus.Debugf("error creating image: image with ID %q exists, but uses different layers", s.ID) + return errors.Wrapf(storage.ErrDuplicateID, "image with ID %q already exists, but uses a different top layer", s.ID) } logrus.Debugf("reusing image ID %q", img.ID) } else { diff --git a/vendor/github.com/containers/image/storage/storage_reference.go b/vendor/github.com/containers/image/storage/storage_reference.go index 66a64792..9aee75be 100644 --- a/vendor/github.com/containers/image/storage/storage_reference.go +++ b/vendor/github.com/containers/image/storage/storage_reference.go @@ -70,7 +70,9 @@ func (s *storageReference) resolveImage() (*storage.Image, error) { // to build this reference object. func (s storageReference) Transport() types.ImageTransport { return &storageTransport{ - store: s.transport.store, + store: s.transport.store, + defaultUIDMap: s.transport.defaultUIDMap, + defaultGIDMap: s.transport.defaultGIDMap, } } @@ -83,7 +85,12 @@ func (s storageReference) DockerReference() reference.Named { // disambiguate between images which may be present in multiple stores and // share only their names. func (s storageReference) StringWithinTransport() string { - storeSpec := "[" + s.transport.store.GraphDriverName() + "@" + s.transport.store.GraphRoot() + "]" + optionsList := "" + options := s.transport.store.GraphOptions() + if len(options) > 0 { + optionsList = ":" + strings.Join(options, ",") + } + storeSpec := "[" + s.transport.store.GraphDriverName() + "@" + s.transport.store.GraphRoot() + "+" + s.transport.store.RunRoot() + optionsList + "]" if s.name == nil { return storeSpec + "@" + s.id } @@ -94,7 +101,14 @@ func (s storageReference) StringWithinTransport() string { } func (s storageReference) PolicyConfigurationIdentity() string { - return s.StringWithinTransport() + storeSpec := "[" + s.transport.store.GraphDriverName() + "@" + s.transport.store.GraphRoot() + "]" + if s.name == nil { + return storeSpec + "@" + s.id + } + if s.id == "" { + return storeSpec + s.reference + } + return storeSpec + s.reference + "@" + s.id } // Also accept policy that's tied to the combination of the graph root and diff --git a/vendor/github.com/containers/image/storage/storage_transport.go b/vendor/github.com/containers/image/storage/storage_transport.go index 6539e7ea..336dd814 100644 --- a/vendor/github.com/containers/image/storage/storage_transport.go +++ b/vendor/github.com/containers/image/storage/storage_transport.go @@ -11,6 +11,7 @@ import ( "github.com/containers/image/transports" "github.com/containers/image/types" "github.com/containers/storage" + "github.com/containers/storage/pkg/idtools" "github.com/opencontainers/go-digest" ddigest "github.com/opencontainers/go-digest" ) @@ -46,10 +47,20 @@ type StoreTransport interface { // ParseStoreReference parses a reference, overriding any store // specification that it may contain. ParseStoreReference(store storage.Store, reference string) (*storageReference, error) + // SetDefaultUIDMap sets the default UID map to use when opening stores. + SetDefaultUIDMap(idmap []idtools.IDMap) + // SetDefaultGIDMap sets the default GID map to use when opening stores. + SetDefaultGIDMap(idmap []idtools.IDMap) + // DefaultUIDMap returns the default UID map used when opening stores. + DefaultUIDMap() []idtools.IDMap + // DefaultGIDMap returns the default GID map used when opening stores. + DefaultGIDMap() []idtools.IDMap } type storageTransport struct { - store storage.Store + store storage.Store + defaultUIDMap []idtools.IDMap + defaultGIDMap []idtools.IDMap } func (s *storageTransport) Name() string { @@ -66,6 +77,26 @@ func (s *storageTransport) SetStore(store storage.Store) { s.store = store } +// SetDefaultUIDMap sets the default UID map to use when opening stores. +func (s *storageTransport) SetDefaultUIDMap(idmap []idtools.IDMap) { + s.defaultUIDMap = idmap +} + +// SetDefaultGIDMap sets the default GID map to use when opening stores. +func (s *storageTransport) SetDefaultGIDMap(idmap []idtools.IDMap) { + s.defaultGIDMap = idmap +} + +// DefaultUIDMap returns the default UID map used when opening stores. +func (s *storageTransport) DefaultUIDMap() []idtools.IDMap { + return s.defaultUIDMap +} + +// DefaultGIDMap returns the default GID map used when opening stores. +func (s *storageTransport) DefaultGIDMap() []idtools.IDMap { + return s.defaultGIDMap +} + // ParseStoreReference takes a name or an ID, tries to figure out which it is // relative to the given store, and returns it in a reference object. func (s storageTransport) ParseStoreReference(store storage.Store, ref string) (*storageReference, error) { @@ -110,7 +141,12 @@ func (s storageTransport) ParseStoreReference(store storage.Store, ref string) ( // recognize. return nil, ErrInvalidReference } - storeSpec := "[" + store.GraphDriverName() + "@" + store.GraphRoot() + "]" + optionsList := "" + options := store.GraphOptions() + if len(options) > 0 { + optionsList = ":" + strings.Join(options, ",") + } + storeSpec := "[" + store.GraphDriverName() + "@" + store.GraphRoot() + "+" + store.RunRoot() + optionsList + "]" id := "" if sum.Validate() == nil { id = sum.Hex() @@ -127,14 +163,17 @@ func (s storageTransport) ParseStoreReference(store storage.Store, ref string) ( } else { logrus.Debugf("parsed reference into %q", storeSpec+refname+"@"+id) } - return newReference(storageTransport{store: store}, refname, id, name), nil + return newReference(storageTransport{store: store, defaultUIDMap: s.defaultUIDMap, defaultGIDMap: s.defaultGIDMap}, refname, id, name), nil } func (s *storageTransport) GetStore() (storage.Store, error) { // Return the transport's previously-set store. If we don't have one // of those, initialize one now. if s.store == nil { - store, err := storage.GetStore(storage.DefaultStoreOptions) + options := storage.DefaultStoreOptions + options.UIDMap = s.defaultUIDMap + options.GIDMap = s.defaultGIDMap + store, err := storage.GetStore(options) if err != nil { return nil, err } @@ -145,15 +184,11 @@ func (s *storageTransport) GetStore() (storage.Store, error) { // ParseReference takes a name and/or an ID ("_name_"/"@_id_"/"_name_@_id_"), // possibly prefixed with a store specifier in the form "[_graphroot_]" or -// "[_driver_@_graphroot_]", tries to figure out which it is, and returns it in -// a reference object. If the _graphroot_ is a location other than the default, -// it needs to have been previously opened using storage.GetStore(), so that it -// can figure out which run root goes with the graph root. +// "[_driver_@_graphroot_]" or "[_driver_@_graphroot_+_runroot_]" or +// "[_driver_@_graphroot_:_options_]" or "[_driver_@_graphroot_+_runroot_:_options_]", +// tries to figure out which it is, and returns it in a reference object. func (s *storageTransport) ParseReference(reference string) (types.ImageReference, error) { - store, err := s.GetStore() - if err != nil { - return nil, err - } + var store storage.Store // Check if there's a store location prefix. If there is, then it // needs to match a store that was previously initialized using // storage.GetStore(), or be enough to let the storage library fill out @@ -165,37 +200,65 @@ func (s *storageTransport) ParseReference(reference string) (types.ImageReferenc } storeSpec := reference[1:closeIndex] reference = reference[closeIndex+1:] - storeInfo := strings.SplitN(storeSpec, "@", 2) - if len(storeInfo) == 1 && storeInfo[0] != "" { - // One component: the graph root. - if !filepath.IsAbs(storeInfo[0]) { - return nil, ErrPathNotAbsolute + // Peel off a "driver@" from the start. + driverInfo := "" + driverSplit := strings.SplitN(storeSpec, "@", 2) + if len(driverSplit) != 2 { + if storeSpec == "" { + return nil, ErrInvalidReference } - store2, err := storage.GetStore(storage.StoreOptions{ - GraphRoot: storeInfo[0], - }) - if err != nil { - return nil, err - } - store = store2 - } else if len(storeInfo) == 2 && storeInfo[0] != "" && storeInfo[1] != "" { - // Two components: the driver type and the graph root. - if !filepath.IsAbs(storeInfo[1]) { - return nil, ErrPathNotAbsolute - } - store2, err := storage.GetStore(storage.StoreOptions{ - GraphDriverName: storeInfo[0], - GraphRoot: storeInfo[1], - }) - if err != nil { - return nil, err - } - store = store2 } else { - // Anything else: store specified in a form we don't - // recognize. - return nil, ErrInvalidReference + driverInfo = driverSplit[0] + if driverInfo == "" { + return nil, ErrInvalidReference + } + storeSpec = driverSplit[1] + if storeSpec == "" { + return nil, ErrInvalidReference + } } + // Peel off a ":options" from the end. + var options []string + optionsSplit := strings.SplitN(storeSpec, ":", 2) + if len(optionsSplit) == 2 { + options = strings.Split(optionsSplit[1], ",") + storeSpec = optionsSplit[0] + } + // Peel off a "+runroot" from the new end. + runRootInfo := "" + runRootSplit := strings.SplitN(storeSpec, "+", 2) + if len(runRootSplit) == 2 { + runRootInfo = runRootSplit[1] + storeSpec = runRootSplit[0] + } + // The rest is our graph root. + rootInfo := storeSpec + // Check that any paths are absolute paths. + if rootInfo != "" && !filepath.IsAbs(rootInfo) { + return nil, ErrPathNotAbsolute + } + if runRootInfo != "" && !filepath.IsAbs(runRootInfo) { + return nil, ErrPathNotAbsolute + } + store2, err := storage.GetStore(storage.StoreOptions{ + GraphDriverName: driverInfo, + GraphRoot: rootInfo, + RunRoot: runRootInfo, + GraphDriverOptions: options, + UIDMap: s.defaultUIDMap, + GIDMap: s.defaultGIDMap, + }) + if err != nil { + return nil, err + } + store = store2 + } else { + // We didn't have a store spec, so use the default. + store2, err := s.GetStore() + if err != nil { + return nil, err + } + store = store2 } return s.ParseStoreReference(store, reference) } @@ -250,7 +313,7 @@ func (s storageTransport) ValidatePolicyConfigurationScope(scope string) error { return ErrPathNotAbsolute } } else { - // Anything else: store specified in a form we don't + // Anything else: scope specified in a form we don't // recognize. return ErrInvalidReference } diff --git a/vendor/github.com/containers/image/vendor.conf b/vendor/github.com/containers/image/vendor.conf new file mode 100644 index 00000000..14269e8b --- /dev/null +++ b/vendor/github.com/containers/image/vendor.conf @@ -0,0 +1,37 @@ +github.com/Sirupsen/logrus 7f4b1adc791766938c29457bed0703fb9134421a +github.com/containers/storage 105f7c77aef0c797429e41552743bf5b03b63263 +github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76 +github.com/docker/distribution df5327f76fb6468b84a87771e361762b8be23fdb +github.com/docker/docker 75843d36aa5c3eaade50da005f9e0ff2602f3d5e +github.com/docker/go-connections 7da10c8c50cad14494ec818dcdfb6506265c0086 +github.com/docker/go-units 0dadbb0345b35ec7ef35e228dabb8de89a65bf52 +github.com/docker/libtrust aabc10ec26b754e797f9028f4589c5b7bd90dc20 +github.com/ghodss/yaml 04f313413ffd65ce25f2541bfd2b2ceec5c0908c +github.com/gorilla/context 08b5f424b9271eedf6f9f0ce86cb9396ed337a42 +github.com/gorilla/mux 94e7d24fd285520f3d12ae998f7fdd6b5393d453 +github.com/imdario/mergo 50d4dbd4eb0e84778abe37cefef140271d96fade +github.com/mattn/go-runewidth 14207d285c6c197daabb5c9793d63e7af9ab2d50 +github.com/mattn/go-shellwords 005a0944d84452842197c2108bd9168ced206f78 +github.com/mistifyio/go-zfs c0224de804d438efd11ea6e52ada8014537d6062 +github.com/mtrmac/gpgme b2432428689ca58c2b8e8dea9449d3295cf96fc9 +github.com/opencontainers/go-digest aa2ec055abd10d26d539eb630a92241b781ce4bc +github.com/opencontainers/image-spec v1.0.0-rc6 +github.com/opencontainers/runc 6b1d0e76f239ffb435445e5ae316d2676c07c6e3 +github.com/pborman/uuid 1b00554d822231195d1babd97ff4a781231955c9 +github.com/pkg/errors 248dadf4e9068a0b3e79f02ed0a610d935de5302 +github.com/pmezard/go-difflib 792786c7400a136282c1664665ae0a8db921c6c2 +github.com/stretchr/testify 4d4bfba8f1d1027c4fdbe371823030df51419987 +github.com/vbatts/tar-split bd4c5d64c3e9297f410025a3b1bd0c58f659e721 +golang.org/x/crypto 453249f01cfeb54c3d549ddb75ff152ca243f9d8 +golang.org/x/net 6b27048ae5e6ad1ef927e72e437531493de612fe +golang.org/x/sys 075e574b89e4c2d22f2286a7e2b919519c6f3547 +gopkg.in/cheggaaa/pb.v1 d7e6ca3010b6f084d8056847f55d7f572f180678 +gopkg.in/yaml.v2 a3f3340b5840cee44f372bddb5880fcbc419b46a +k8s.io/client-go bcde30fb7eaed76fd98a36b4120321b94995ffb6 +github.com/xeipuuv/gojsonschema master +github.com/xeipuuv/gojsonreference master +github.com/xeipuuv/gojsonpointer master +github.com/tchap/go-patricia v2.2.6 +github.com/opencontainers/selinux ba1aefe8057f1d0cfb8e88d0ec1dc85925ef987d +github.com/BurntSushi/toml b26d9c308763d68093482582cea63d69be07a0f0 +github.com/ostreedev/ostree-go aeb02c6b6aa2889db3ef62f7855650755befd460