mirror of
https://github.com/containers/podman.git
synced 2025-11-29 09:37:38 +08:00
Tremendous amount of changes in here, but all should amount to the same thing: changing Go import paths from v5 to v6. Also bumped go.mod to github.com/containers/podman/v6 and updated version to v6.0.0-dev. Signed-off-by: Matt Heon <mheon@redhat.com>
109 lines
3.2 KiB
Go
109 lines
3.2 KiB
Go
package entities
|
|
|
|
import (
|
|
"errors"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/containers/podman/v6/pkg/domain/entities/types"
|
|
)
|
|
|
|
// ExternalContainerFilter is a function to determine whether a container list is included
|
|
// in command output. Container lists to be outputted are tested using the function.
|
|
// A true return will include the container list, a false return will exclude it.
|
|
type ExternalContainerFilter func(*ListContainer) bool
|
|
|
|
// ListContainer describes a container suitable for listing
|
|
type ListContainer = types.ListContainer
|
|
|
|
// ListContainerNamespaces contains the identifiers of the container's Linux namespaces
|
|
type ListContainerNamespaces = types.ListContainerNamespaces
|
|
|
|
type SortListContainers []ListContainer
|
|
|
|
func (a SortListContainers) Len() int { return len(a) }
|
|
func (a SortListContainers) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
|
|
|
type psSortedCommand struct{ SortListContainers }
|
|
|
|
func (a psSortedCommand) Less(i, j int) bool {
|
|
return strings.Join(a.SortListContainers[i].Command, " ") < strings.Join(a.SortListContainers[j].Command, " ")
|
|
}
|
|
|
|
type psSortedID struct{ SortListContainers }
|
|
|
|
func (a psSortedID) Less(i, j int) bool {
|
|
return a.SortListContainers[i].ID < a.SortListContainers[j].ID
|
|
}
|
|
|
|
type psSortedImage struct{ SortListContainers }
|
|
|
|
func (a psSortedImage) Less(i, j int) bool {
|
|
return a.SortListContainers[i].Image < a.SortListContainers[j].Image
|
|
}
|
|
|
|
type psSortedNames struct{ SortListContainers }
|
|
|
|
func (a psSortedNames) Less(i, j int) bool {
|
|
return a.SortListContainers[i].Names[0] < a.SortListContainers[j].Names[0]
|
|
}
|
|
|
|
type psSortedPod struct{ SortListContainers }
|
|
|
|
func (a psSortedPod) Less(i, j int) bool {
|
|
return a.SortListContainers[i].Pod < a.SortListContainers[j].Pod
|
|
}
|
|
|
|
type psSortedRunningFor struct{ SortListContainers }
|
|
|
|
func (a psSortedRunningFor) Less(i, j int) bool {
|
|
return a.SortListContainers[i].StartedAt < a.SortListContainers[j].StartedAt
|
|
}
|
|
|
|
type psSortedStatus struct{ SortListContainers }
|
|
|
|
func (a psSortedStatus) Less(i, j int) bool {
|
|
return a.SortListContainers[i].State < a.SortListContainers[j].State
|
|
}
|
|
|
|
type psSortedSize struct{ SortListContainers }
|
|
|
|
func (a psSortedSize) Less(i, j int) bool {
|
|
if a.SortListContainers[i].Size == nil || a.SortListContainers[j].Size == nil {
|
|
return false
|
|
}
|
|
return a.SortListContainers[i].Size.RootFsSize < a.SortListContainers[j].Size.RootFsSize
|
|
}
|
|
|
|
type PsSortedCreateTime struct{ SortListContainers }
|
|
|
|
func (a PsSortedCreateTime) Less(i, j int) bool {
|
|
return a.SortListContainers[i].Created.Before(a.SortListContainers[j].Created)
|
|
}
|
|
|
|
func SortPsOutput(sortBy string, psOutput SortListContainers) (SortListContainers, error) {
|
|
switch sortBy {
|
|
case "id":
|
|
sort.Sort(psSortedID{psOutput})
|
|
case "image":
|
|
sort.Sort(psSortedImage{psOutput})
|
|
case "command":
|
|
sort.Sort(psSortedCommand{psOutput})
|
|
case "runningfor":
|
|
sort.Sort(psSortedRunningFor{psOutput})
|
|
case "status":
|
|
sort.Sort(psSortedStatus{psOutput})
|
|
case "size":
|
|
sort.Sort(psSortedSize{psOutput})
|
|
case "names":
|
|
sort.Sort(psSortedNames{psOutput})
|
|
case "created":
|
|
sort.Sort(PsSortedCreateTime{psOutput})
|
|
case "pod":
|
|
sort.Sort(psSortedPod{psOutput})
|
|
default:
|
|
return nil, errors.New("invalid option for --sort, options are: command, created, id, image, names, runningfor, size, or status")
|
|
}
|
|
return psOutput, nil
|
|
}
|