79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
package image
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/dustin/go-humanize"
|
|
"github.com/wagoodman/dive/filetree"
|
|
)
|
|
|
|
const (
|
|
// LayerFormat = "%-15s %7s %s"
|
|
LayerFormat = "%7s %s"
|
|
)
|
|
|
|
// ShortId returns the truncated id of the current layer.
|
|
func (layer *dockerLayer) TarId() string {
|
|
return strings.TrimSuffix(layer.tarPath, "/layer.tar")
|
|
}
|
|
|
|
// ShortId returns the truncated id of the current layer.
|
|
func (layer *dockerLayer) Id() string {
|
|
return layer.history.ID
|
|
}
|
|
|
|
// index returns the relative position of the layer within the image.
|
|
func (layer *dockerLayer) Index() int {
|
|
return layer.index
|
|
}
|
|
|
|
// Size returns the number of bytes that this image is.
|
|
func (layer *dockerLayer) Size() uint64 {
|
|
return layer.history.Size
|
|
}
|
|
|
|
// Tree returns the file tree representing the current layer.
|
|
func (layer *dockerLayer) Tree() *filetree.FileTree {
|
|
return layer.tree
|
|
}
|
|
|
|
// ShortId returns the truncated id of the current layer.
|
|
func (layer *dockerLayer) Command() string {
|
|
return strings.TrimPrefix(layer.history.CreatedBy, "/bin/sh -c ")
|
|
}
|
|
|
|
// ShortId returns the truncated id of the current layer.
|
|
func (layer *dockerLayer) ShortId() string {
|
|
rangeBound := 15
|
|
id := layer.Id()
|
|
if length := len(id); length < 15 {
|
|
rangeBound = length
|
|
}
|
|
id = id[0:rangeBound]
|
|
|
|
// show the tagged image as the last layer
|
|
// if len(layer.History.Tags) > 0 {
|
|
// id = "[" + strings.Join(layer.History.Tags, ",") + "]"
|
|
// }
|
|
|
|
return id
|
|
}
|
|
|
|
// String represents a layer in a columnar format.
|
|
func (layer *dockerLayer) String() string {
|
|
|
|
if layer.index == 0 {
|
|
return fmt.Sprintf(LayerFormat,
|
|
// layer.ShortId(),
|
|
// fmt.Sprintf("%d",layer.Index()),
|
|
humanize.Bytes(layer.Size()),
|
|
"FROM "+layer.ShortId())
|
|
}
|
|
return fmt.Sprintf(LayerFormat,
|
|
// layer.ShortId(),
|
|
// fmt.Sprintf("%d",layer.Index()),
|
|
humanize.Bytes(layer.Size()),
|
|
layer.Command())
|
|
}
|