58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
package image
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/dustin/go-humanize"
|
|
"github.com/wagoodman/dive/filetree"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
LayerFormat = "%-25s %7s %s"
|
|
)
|
|
|
|
// Layer represents a Docker image layer and metadata
|
|
type Layer struct {
|
|
TarPath string
|
|
History ImageHistoryEntry
|
|
Index int
|
|
Tree *filetree.FileTree
|
|
RefTrees []*filetree.FileTree
|
|
}
|
|
|
|
// ShortId returns the truncated id of the current layer.
|
|
func (layer *Layer) TarId() string {
|
|
return strings.TrimSuffix(layer.TarPath, "/layer.tar")
|
|
}
|
|
|
|
// ShortId returns the truncated id of the current layer.
|
|
func (layer *Layer) Id() string {
|
|
return layer.History.ID
|
|
}
|
|
|
|
// ShortId returns the truncated id of the current layer.
|
|
func (layer *Layer) ShortId() string {
|
|
rangeBound := 25
|
|
id := layer.Id()
|
|
if length := len(id); length < 25 {
|
|
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 *Layer) String() string {
|
|
|
|
return fmt.Sprintf(LayerFormat,
|
|
layer.ShortId(),
|
|
humanize.Bytes(uint64(layer.History.Size)),
|
|
strings.TrimPrefix(layer.History.CreatedBy, "/bin/sh -c "))
|
|
}
|