cmd/skopeo: check errors on close functions for image handling.

Signed-off-by: Erik Hollensbe <github@hollensbe.org>
This commit is contained in:
Erik Hollensbe
2017-02-20 10:40:05 -08:00
parent b9826f0c42
commit e0efa0c2b3
2 changed files with 28 additions and 9 deletions

View File

@@ -8,6 +8,7 @@ import (
"github.com/containers/image/docker" "github.com/containers/image/docker"
"github.com/containers/image/manifest" "github.com/containers/image/manifest"
"github.com/opencontainers/go-digest" "github.com/opencontainers/go-digest"
"github.com/pkg/errors"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
@@ -49,12 +50,17 @@ var inspectCmd = cli.Command{
Usage: "Use `USERNAME[:PASSWORD]` for accessing the registry", Usage: "Use `USERNAME[:PASSWORD]` for accessing the registry",
}, },
}, },
Action: func(c *cli.Context) error { Action: func(c *cli.Context) (retErr error) {
img, err := parseImage(c) img, err := parseImage(c)
if err != nil { if err != nil {
return err return err
} }
defer img.Close()
defer func() {
if err := img.Close(); err != nil {
retErr = errors.Wrapf(retErr, fmt.Sprintf("(could not close image: %v) ", err))
}
}()
rawManifest, _, err := img.Manifest() rawManifest, _, err := img.Manifest()
if err != nil { if err != nil {

View File

@@ -1,7 +1,6 @@
package main package main
import ( import (
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
@@ -12,6 +11,7 @@ import (
"github.com/containers/image/manifest" "github.com/containers/image/manifest"
"github.com/containers/image/types" "github.com/containers/image/types"
"github.com/opencontainers/go-digest" "github.com/opencontainers/go-digest"
"github.com/pkg/errors"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
@@ -20,7 +20,7 @@ var layersCmd = cli.Command{
Usage: "Get layers of IMAGE-NAME", Usage: "Get layers of IMAGE-NAME",
ArgsUsage: "IMAGE-NAME [LAYER...]", ArgsUsage: "IMAGE-NAME [LAYER...]",
Hidden: true, Hidden: true,
Action: func(c *cli.Context) error { Action: func(c *cli.Context) (retErr error) {
fmt.Fprintln(os.Stderr, `DEPRECATED: skopeo layers is deprecated in favor of skopeo copy`) fmt.Fprintln(os.Stderr, `DEPRECATED: skopeo layers is deprecated in favor of skopeo copy`)
if c.NArg() == 0 { if c.NArg() == 0 {
return errors.New("Usage: layers imageReference [layer...]") return errors.New("Usage: layers imageReference [layer...]")
@@ -36,10 +36,17 @@ var layersCmd = cli.Command{
} }
src, err := image.FromSource(rawSource) src, err := image.FromSource(rawSource)
if err != nil { if err != nil {
rawSource.Close() if closeErr := rawSource.Close(); closeErr != nil {
return errors.Wrapf(err, " (close error: %v)", closeErr)
}
return err return err
} }
defer src.Close() defer func() {
if err := src.Close(); err != nil {
retErr = errors.Wrapf(retErr, " (close error: %v)", err)
}
}()
var blobDigests []digest.Digest var blobDigests []digest.Digest
for _, dString := range c.Args().Tail() { for _, dString := range c.Args().Tail() {
@@ -80,7 +87,12 @@ var layersCmd = cli.Command{
if err != nil { if err != nil {
return err return err
} }
defer dest.Close()
defer func() {
if err := dest.Close(); err != nil {
retErr = errors.Wrapf(retErr, " (close error: %v)", err)
}
}()
for _, digest := range blobDigests { for _, digest := range blobDigests {
r, blobSize, err := rawSource.GetBlob(types.BlobInfo{Digest: digest, Size: -1}) r, blobSize, err := rawSource.GetBlob(types.BlobInfo{Digest: digest, Size: -1})
@@ -88,10 +100,11 @@ var layersCmd = cli.Command{
return err return err
} }
if _, err := dest.PutBlob(r, types.BlobInfo{Digest: digest, Size: blobSize}); err != nil { if _, err := dest.PutBlob(r, types.BlobInfo{Digest: digest, Size: blobSize}); err != nil {
r.Close() if closeErr := r.Close(); closeErr != nil {
return errors.Wrapf(err, " (close error: %v)", closeErr)
}
return err return err
} }
r.Close()
} }
manifest, _, err := src.Manifest() manifest, _, err := src.Manifest()