mirror of https://github.com/docker/cli.git
Merge be3646b87c
into 9861ce90fd
This commit is contained in:
commit
e66638eb12
|
@ -14,6 +14,7 @@ import (
|
||||||
imagetypes "github.com/docker/docker/api/types/image"
|
imagetypes "github.com/docker/docker/api/types/image"
|
||||||
"github.com/docker/docker/pkg/stringid"
|
"github.com/docker/docker/pkg/stringid"
|
||||||
"github.com/docker/go-units"
|
"github.com/docker/go-units"
|
||||||
|
"github.com/fvbommel/sortorder"
|
||||||
"github.com/morikuni/aec"
|
"github.com/morikuni/aec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -81,16 +82,46 @@ func runTree(ctx context.Context, dockerCLI command.Cli, opts treeOptions) error
|
||||||
|
|
||||||
details.ContentSize = units.HumanSizeWithPrecision(float64(totalContent), 3)
|
details.ContentSize = units.HumanSizeWithPrecision(float64(totalContent), 3)
|
||||||
|
|
||||||
view.images = append(view.images, topImage{
|
if len(img.RepoTags) == 0 {
|
||||||
Names: img.RepoTags,
|
// Untagged image
|
||||||
Details: details,
|
view.images = append(view.images, topImage{
|
||||||
Children: children,
|
Names: img.RepoTags,
|
||||||
created: img.Created,
|
Details: details,
|
||||||
})
|
Children: children,
|
||||||
|
created: img.Created,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// Present images tagged under multiple names as separate images.
|
||||||
|
for _, n := range img.RepoTags {
|
||||||
|
view.images = append(view.images, topImage{
|
||||||
|
Names: []string{n}, // Consider changing Names to be a single name for purpose of this presentation.
|
||||||
|
Details: details,
|
||||||
|
Children: children,
|
||||||
|
created: img.Created,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sort images alphabetically using natural-sort, with untagged images last.
|
||||||
sort.Slice(view.images, func(i, j int) bool {
|
sort.Slice(view.images, func(i, j int) bool {
|
||||||
return view.images[i].created > view.images[j].created
|
iUntagged, jUntagged := len(view.images[i].Names) == 0, len(view.images[j].Names) == 0
|
||||||
|
if iUntagged || jUntagged {
|
||||||
|
switch {
|
||||||
|
case iUntagged && jUntagged:
|
||||||
|
// Both untagged images; sort by created date (desc)
|
||||||
|
return view.images[i].created > view.images[j].created
|
||||||
|
case iUntagged:
|
||||||
|
// Sort untagged images last
|
||||||
|
return false
|
||||||
|
case jUntagged:
|
||||||
|
// Sort untagged images last
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort alphabetically, ascending
|
||||||
|
return sortorder.NaturalLess(view.images[i].Names[0], view.images[j].Names[0])
|
||||||
})
|
})
|
||||||
|
|
||||||
return printImageTree(dockerCLI, view)
|
return printImageTree(dockerCLI, view)
|
||||||
|
|
Loading…
Reference in New Issue