in container_images/registry-image-forked/commands/unpack.go [23:71]
func unpackImage(dest string, img v1.Image, debug bool, out io.Writer) error {
layers, err := img.Layers()
if err != nil {
return err
}
chown := os.Getuid() == 0
if debug {
out = ioutil.Discard
}
progress := mpb.New(mpb.WithOutput(out))
bars := make([]*mpb.Bar, len(layers))
for i, layer := range layers {
size, err := layer.Size()
if err != nil {
return err
}
digest, err := layer.Digest()
if err != nil {
return err
}
bars[i] = progress.AddBar(
size,
mpb.PrependDecorators(decor.Name(color.HiBlackString(digest.Hex[0:12]))),
mpb.AppendDecorators(decor.CountersKibiByte("%.1f/%.1f")),
)
}
// iterate over layers in reverse order; no need to write things files that
// are modified by later layers anyway
for i, layer := range layers {
logrus.Debugf("extracting layer %d of %d", i+1, len(layers))
err := extractLayer(dest, layer, bars[i], chown)
if err != nil {
return err
}
}
progress.Wait()
return nil
}