summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vendor.conf2
-rw-r--r--vendor/github.com/containers/image/docker/archive/src.go14
-rw-r--r--vendor/github.com/containers/image/docker/archive/transport.go7
-rw-r--r--vendor/github.com/containers/image/docker/daemon/daemon_src.go33
-rw-r--r--vendor/github.com/containers/image/docker/tarfile/src.go71
-rw-r--r--vendor/github.com/containers/image/transports/alltransports/ostree.go2
-rw-r--r--vendor/github.com/containers/image/transports/alltransports/ostree_stub.go2
7 files changed, 80 insertions, 51 deletions
diff --git a/vendor.conf b/vendor.conf
index 644d5e7a9..25d6f782b 100644
--- a/vendor.conf
+++ b/vendor.conf
@@ -1,6 +1,6 @@
#
github.com/sirupsen/logrus v1.0.0
-github.com/containers/image f7ea1dcb32a06092905672e99faa75bf2f61632b
+github.com/containers/image b129a8413fd1e8c53379acbbacfc7b667070ae50
github.com/docker/docker-credential-helpers d68f9aeca33f5fd3f08eeae5e9d175edf4e731d1
github.com/ostreedev/ostree-go master
github.com/containers/storage 1e5ce40cdb84ab66e26186435b1273e04b879fef
diff --git a/vendor/github.com/containers/image/docker/archive/src.go b/vendor/github.com/containers/image/docker/archive/src.go
index 67b7ba139..bd5a5e296 100644
--- a/vendor/github.com/containers/image/docker/archive/src.go
+++ b/vendor/github.com/containers/image/docker/archive/src.go
@@ -13,15 +13,18 @@ type archiveImageSource struct {
// newImageSource returns a types.ImageSource for the specified image reference.
// The caller must call .Close() on the returned ImageSource.
-func newImageSource(ctx *types.SystemContext, ref archiveReference) types.ImageSource {
+func newImageSource(ctx *types.SystemContext, ref archiveReference) (types.ImageSource, error) {
if ref.destinationRef != nil {
logrus.Warnf("docker-archive: references are not supported for sources (ignoring)")
}
- src := tarfile.NewSource(ref.path)
+ src, err := tarfile.NewSourceFromFile(ref.path)
+ if err != nil {
+ return nil, err
+ }
return &archiveImageSource{
Source: src,
ref: ref,
- }
+ }, nil
}
// Reference returns the reference used to set up this source, _as specified by the user_
@@ -30,11 +33,6 @@ func (s *archiveImageSource) Reference() types.ImageReference {
return s.ref
}
-// Close removes resources associated with an initialized ImageSource, if any.
-func (s *archiveImageSource) Close() error {
- return nil
-}
-
// LayerInfosForCopy() returns updated layer info that should be used when reading, in preference to values in the manifest, if specified.
func (s *archiveImageSource) LayerInfosForCopy() ([]types.BlobInfo, error) {
return nil, nil
diff --git a/vendor/github.com/containers/image/docker/archive/transport.go b/vendor/github.com/containers/image/docker/archive/transport.go
index 047df73db..ad6a68837 100644
--- a/vendor/github.com/containers/image/docker/archive/transport.go
+++ b/vendor/github.com/containers/image/docker/archive/transport.go
@@ -131,14 +131,17 @@ func (ref archiveReference) PolicyConfigurationNamespaces() []string {
// verify that UnparsedImage, and convert it into a real Image via image.FromUnparsedImage.
// WARNING: This may not do the right thing for a manifest list, see image.FromSource for details.
func (ref archiveReference) NewImage(ctx *types.SystemContext) (types.ImageCloser, error) {
- src := newImageSource(ctx, ref)
+ src, err := newImageSource(ctx, ref)
+ if err != nil {
+ return nil, err
+ }
return ctrImage.FromSource(ctx, src)
}
// NewImageSource returns a types.ImageSource for this reference.
// The caller must call .Close() on the returned ImageSource.
func (ref archiveReference) NewImageSource(ctx *types.SystemContext) (types.ImageSource, error) {
- return newImageSource(ctx, ref), nil
+ return newImageSource(ctx, ref)
}
// NewImageDestination returns a types.ImageDestination for this reference.
diff --git a/vendor/github.com/containers/image/docker/daemon/daemon_src.go b/vendor/github.com/containers/image/docker/daemon/daemon_src.go
index ba4331190..638962c50 100644
--- a/vendor/github.com/containers/image/docker/daemon/daemon_src.go
+++ b/vendor/github.com/containers/image/docker/daemon/daemon_src.go
@@ -1,12 +1,7 @@
package daemon
import (
- "io"
- "io/ioutil"
- "os"
-
"github.com/containers/image/docker/tarfile"
- "github.com/containers/image/internal/tmpdir"
"github.com/containers/image/types"
"github.com/pkg/errors"
"golang.org/x/net/context"
@@ -15,7 +10,6 @@ import (
type daemonImageSource struct {
ref daemonReference
*tarfile.Source // Implements most of types.ImageSource
- tarCopyPath string
}
type layerInfo struct {
@@ -45,29 +39,13 @@ func newImageSource(ctx *types.SystemContext, ref daemonReference) (types.ImageS
}
defer inputStream.Close()
- // FIXME: use SystemContext here.
- tarCopyFile, err := ioutil.TempFile(tmpdir.TemporaryDirectoryForBigFiles(), "docker-daemon-tar")
+ src, err := tarfile.NewSourceFromStream(inputStream)
if err != nil {
return nil, err
}
- defer tarCopyFile.Close()
-
- succeeded := false
- defer func() {
- if !succeeded {
- os.Remove(tarCopyFile.Name())
- }
- }()
-
- if _, err := io.Copy(tarCopyFile, inputStream); err != nil {
- return nil, err
- }
-
- succeeded = true
return &daemonImageSource{
- ref: ref,
- Source: tarfile.NewSource(tarCopyFile.Name()),
- tarCopyPath: tarCopyFile.Name(),
+ ref: ref,
+ Source: src,
}, nil
}
@@ -77,11 +55,6 @@ func (s *daemonImageSource) Reference() types.ImageReference {
return s.ref
}
-// Close removes resources associated with an initialized ImageSource, if any.
-func (s *daemonImageSource) Close() error {
- return os.Remove(s.tarCopyPath)
-}
-
// LayerInfosForCopy() returns updated layer info that should be used when reading, in preference to values in the manifest, if specified.
func (s *daemonImageSource) LayerInfosForCopy() ([]types.BlobInfo, error) {
return nil, nil
diff --git a/vendor/github.com/containers/image/docker/tarfile/src.go b/vendor/github.com/containers/image/docker/tarfile/src.go
index a18e21058..e7a5231df 100644
--- a/vendor/github.com/containers/image/docker/tarfile/src.go
+++ b/vendor/github.com/containers/image/docker/tarfile/src.go
@@ -3,6 +3,7 @@ package tarfile
import (
"archive/tar"
"bytes"
+ "compress/gzip"
"context"
"encoding/json"
"io"
@@ -10,6 +11,7 @@ import (
"os"
"path"
+ "github.com/containers/image/internal/tmpdir"
"github.com/containers/image/manifest"
"github.com/containers/image/pkg/compression"
"github.com/containers/image/types"
@@ -19,7 +21,8 @@ import (
// Source is a partial implementation of types.ImageSource for reading from tarPath.
type Source struct {
- tarPath string
+ tarPath string
+ removeTarPathOnClose bool // Remove temp file on close if true
// The following data is only available after ensureCachedDataIsPresent() succeeds
tarManifest *ManifestItem // nil if not available yet.
configBytes []byte
@@ -35,14 +38,58 @@ type layerInfo struct {
size int64
}
-// NewSource returns a tarfile.Source for the specified path.
-func NewSource(path string) *Source {
- // TODO: We could add support for multiple images in a single archive, so
- // that people could use docker-archive:opensuse.tar:opensuse:leap as
- // the source of an image.
- return &Source{
- tarPath: path,
+// TODO: We could add support for multiple images in a single archive, so
+// that people could use docker-archive:opensuse.tar:opensuse:leap as
+// the source of an image.
+// To do for both the NewSourceFromFile and NewSourceFromStream functions
+
+// NewSourceFromFile returns a tarfile.Source for the specified path
+// NewSourceFromFile supports both conpressed and uncompressed input
+func NewSourceFromFile(path string) (*Source, error) {
+ file, err := os.Open(path)
+ if err != nil {
+ return nil, errors.Wrapf(err, "error opening file %q", path)
+ }
+ defer file.Close()
+
+ reader, err := gzip.NewReader(file)
+ if err != nil {
+ return &Source{
+ tarPath: path,
+ }, nil
}
+ defer reader.Close()
+
+ return NewSourceFromStream(reader)
+}
+
+// NewSourceFromStream returns a tarfile.Source for the specified inputStream, which must be uncompressed.
+// The caller can close the inputStream immediately after NewSourceFromFile returns.
+func NewSourceFromStream(inputStream io.Reader) (*Source, error) {
+ // FIXME: use SystemContext here.
+ // Save inputStream to a temporary file
+ tarCopyFile, err := ioutil.TempFile(tmpdir.TemporaryDirectoryForBigFiles(), "docker-tar")
+ if err != nil {
+ return nil, errors.Wrap(err, "error creating temporary file")
+ }
+ defer tarCopyFile.Close()
+
+ succeeded := false
+ defer func() {
+ if !succeeded {
+ os.Remove(tarCopyFile.Name())
+ }
+ }()
+
+ if _, err := io.Copy(tarCopyFile, inputStream); err != nil {
+ return nil, errors.Wrapf(err, "error copying contents to temporary file %q", tarCopyFile.Name())
+ }
+ succeeded = true
+
+ return &Source{
+ tarPath: tarCopyFile.Name(),
+ removeTarPathOnClose: true,
+ }, nil
}
// tarReadCloser is a way to close the backing file of a tar.Reader when the user no longer needs the tar component.
@@ -189,6 +236,14 @@ func (s *Source) loadTarManifest() ([]ManifestItem, error) {
return items, nil
}
+// Close removes resources associated with an initialized Source, if any.
+func (s *Source) Close() error {
+ if s.removeTarPathOnClose {
+ return os.Remove(s.tarPath)
+ }
+ return nil
+}
+
// LoadTarManifest loads and decodes the manifest.json
func (s *Source) LoadTarManifest() ([]ManifestItem, error) {
return s.loadTarManifest()
diff --git a/vendor/github.com/containers/image/transports/alltransports/ostree.go b/vendor/github.com/containers/image/transports/alltransports/ostree.go
index 0fc5d7ef7..4a3b29a00 100644
--- a/vendor/github.com/containers/image/transports/alltransports/ostree.go
+++ b/vendor/github.com/containers/image/transports/alltransports/ostree.go
@@ -1,4 +1,4 @@
-// +build !containers_image_ostree_stub
+// +build !containers_image_ostree_stub,linux
package alltransports
diff --git a/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go b/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go
index 8b01afe7c..48fcaa58d 100644
--- a/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go
+++ b/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go
@@ -1,4 +1,4 @@
-// +build containers_image_ostree_stub
+// +build containers_image_ostree_stub !linux
package alltransports