mirror of
https://github.com/containers/podman.git
synced 2025-06-21 01:19:15 +08:00
Also factor out getAllOrLatestContainers() function
Just as the checkAllAndLatest() function the new code in getAllOrLatestContainers() is used in some commands and duplicated. This factors out this code to be used in other places without duplicating it. Signed-off-by: Adrian Reber <areber@redhat.com>
This commit is contained in:

committed by
Adrian Reber

parent
9d9493e41a
commit
215cf7b898
@ -104,6 +104,58 @@ func checkAllAndLatest(c *cli.Context) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// getAllOrLatestContainers tries to return the correct list of containers
|
||||
// depending if --all, --latest or <container-id> is used.
|
||||
// It requires the Context (c) and the Runtime (runtime). As different
|
||||
// commands are using different container state for the --all option
|
||||
// the desired state has to be specified in filterState. If no filter
|
||||
// is desired a -1 can be used to get all containers. For a better
|
||||
// error message, if the filter fails, a corresponding verb can be
|
||||
// specified which will then appear in the error message.
|
||||
func getAllOrLatestContainers(c *cli.Context, runtime *libpod.Runtime, filterState libpod.ContainerStatus, verb string) ([]*libpod.Container, error) {
|
||||
var containers []*libpod.Container
|
||||
var lastError error
|
||||
var err error
|
||||
if c.Bool("all") {
|
||||
if filterState != -1 {
|
||||
var filterFuncs []libpod.ContainerFilter
|
||||
filterFuncs = append(filterFuncs, func(c *libpod.Container) bool {
|
||||
state, _ := c.State()
|
||||
return state == filterState
|
||||
})
|
||||
containers, err = runtime.GetContainers(filterFuncs...)
|
||||
} else {
|
||||
containers, err = runtime.GetContainers()
|
||||
}
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to get %s containers", verb)
|
||||
}
|
||||
} else if c.Bool("latest") {
|
||||
lastCtr, err := runtime.GetLatestContainer()
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to get latest container")
|
||||
}
|
||||
containers = append(containers, lastCtr)
|
||||
} else {
|
||||
args := c.Args()
|
||||
for _, i := range args {
|
||||
container, err := runtime.LookupContainer(i)
|
||||
if err != nil {
|
||||
if lastError != nil {
|
||||
fmt.Fprintln(os.Stderr, lastError)
|
||||
}
|
||||
lastError = errors.Wrapf(err, "unable to find container %s", i)
|
||||
}
|
||||
if container != nil {
|
||||
// This is here to make sure this does not return [<nil>] but only nil
|
||||
containers = append(containers, container)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return containers, lastError
|
||||
}
|
||||
|
||||
// getContext returns a non-nil, empty context
|
||||
func getContext() context.Context {
|
||||
return context.TODO()
|
||||
|
Reference in New Issue
Block a user