cmd/skopeo: refactor layers command

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
Antonio Murdaca 2016-06-28 09:50:50 +02:00
parent f420d6867b
commit 9900b79eb6

View File

@ -1,6 +1,11 @@
package main
import (
"io/ioutil"
"strings"
"github.com/containers/image/directory"
"github.com/containers/image/image"
"github.com/urfave/cli"
)
@ -9,13 +14,45 @@ var layersCmd = cli.Command{
Name: "layers",
Usage: "get images layers",
Action: func(c *cli.Context) error {
img, err := parseImage(c)
rawSource, err := parseImageSource(c, c.Args()[0])
if err != nil {
return err
}
if err := img.LayersCommand(c.Args().Tail()...); err != nil {
src := image.FromSource(rawSource)
layers := c.Args().Tail()
if len(layers) == 0 {
ls, err := src.LayerDigests()
if err != nil {
return err
}
layers = ls
}
tmpDir, err := ioutil.TempDir(".", "layers-")
if err != nil {
return err
}
dest := directory.NewDirImageDestination(tmpDir)
manifest, err := src.Manifest()
if err != nil {
return err
}
if err := dest.PutManifest(manifest); err != nil {
return err
}
for _, l := range layers {
if !strings.HasPrefix(l, "sha256:") {
l = "sha256:" + l
}
r, _, err := rawSource.GetBlob(l)
if err != nil {
return err
}
if err := dest.PutBlob(l, r); err != nil {
r.Close()
return err
}
r.Close()
}
return nil
},
}