mirror of
https://github.com/containers/podman.git
synced 2025-09-10 04:12:20 +08:00

Migrate the Podman code base over to `common/libimage` which replaces `libpod/image` and a lot of glue code entirely. Note that I tried to leave bread crumbs for changed tests. Miscellaneous changes: * Some errors yield different messages which required to alter some tests. * I fixed some pre-existing issues in the code. Others were marked as `//TODO`s to prevent the PR from exploding. * The `NamesHistory` of an image is returned as is from the storage. Previously, we did some filtering which I think is undesirable. Instead we should return the data as stored in the storage. * Touched handlers use the ABI interfaces where possible. * Local image resolution: previously Podman would match "foo" on "myfoo". This behaviour has been changed and Podman will now only match on repository boundaries such that "foo" would match "my/foo" but not "myfoo". I consider the old behaviour to be a bug, at the very least an exotic corner case. * Futhermore, "foo:none" does *not* resolve to a local image "foo" without tag anymore. It's a hill I am (almost) willing to die on. * `image prune` prints the IDs of pruned images. Previously, in some cases, the names were printed instead. The API clearly states ID, so we should stick to it. * Compat endpoint image removal with _force_ deletes the entire not only the specified tag. Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
130 lines
2.2 KiB
Go
130 lines
2.2 KiB
Go
// Package gotree create and print tree.
|
|
package gotree
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
newLine = "\n"
|
|
emptySpace = " "
|
|
middleItem = "├── "
|
|
continueItem = "│ "
|
|
lastItem = "└── "
|
|
)
|
|
|
|
type (
|
|
tree struct {
|
|
text string
|
|
items []Tree
|
|
}
|
|
|
|
// Tree is tree interface
|
|
Tree interface {
|
|
Add(text string) Tree
|
|
AddTree(tree Tree)
|
|
Items() []Tree
|
|
Text() string
|
|
Print() string
|
|
}
|
|
|
|
printer struct {
|
|
}
|
|
|
|
// Printer is printer interface
|
|
Printer interface {
|
|
Print(Tree) string
|
|
}
|
|
)
|
|
|
|
//New returns a new GoTree.Tree
|
|
func New(text string) Tree {
|
|
return &tree{
|
|
text: text,
|
|
items: []Tree{},
|
|
}
|
|
}
|
|
|
|
//Add adds a node to the tree
|
|
func (t *tree) Add(text string) Tree {
|
|
n := New(text)
|
|
t.items = append(t.items, n)
|
|
return n
|
|
}
|
|
|
|
//AddTree adds a tree as an item
|
|
func (t *tree) AddTree(tree Tree) {
|
|
t.items = append(t.items, tree)
|
|
}
|
|
|
|
//Text returns the node's value
|
|
func (t *tree) Text() string {
|
|
return t.text
|
|
}
|
|
|
|
//Items returns all items in the tree
|
|
func (t *tree) Items() []Tree {
|
|
return t.items
|
|
}
|
|
|
|
//Print returns an visual representation of the tree
|
|
func (t *tree) Print() string {
|
|
return newPrinter().Print(t)
|
|
}
|
|
|
|
func newPrinter() Printer {
|
|
return &printer{}
|
|
}
|
|
|
|
//Print prints a tree to a string
|
|
func (p *printer) Print(t Tree) string {
|
|
return t.Text() + newLine + p.printItems(t.Items(), []bool{})
|
|
}
|
|
|
|
func (p *printer) printText(text string, spaces []bool, last bool) string {
|
|
var result string
|
|
for _, space := range spaces {
|
|
if space {
|
|
result += emptySpace
|
|
} else {
|
|
result += continueItem
|
|
}
|
|
}
|
|
|
|
indicator := middleItem
|
|
if last {
|
|
indicator = lastItem
|
|
}
|
|
|
|
var out string
|
|
lines := strings.Split(text, "\n")
|
|
for i := range lines {
|
|
text := lines[i]
|
|
if i == 0 {
|
|
out += result + indicator + text + newLine
|
|
continue
|
|
}
|
|
if last {
|
|
indicator = emptySpace
|
|
} else {
|
|
indicator = continueItem
|
|
}
|
|
out += result + indicator + text + newLine
|
|
}
|
|
|
|
return out
|
|
}
|
|
|
|
func (p *printer) printItems(t []Tree, spaces []bool) string {
|
|
var result string
|
|
for i, f := range t {
|
|
last := i == len(t)-1
|
|
result += p.printText(f.Text(), spaces, last)
|
|
if len(f.Items()) > 0 {
|
|
spacesChild := append(spaces, last)
|
|
result += p.printItems(f.Items(), spacesChild)
|
|
}
|
|
}
|
|
return result
|
|
}
|