rmi doesn't remove all images if an error occurs

Print out the error if unable to remove image due to multiple tags
or due to it being used in a container and continue to remove all
the other images.

Signed-off-by: umohnani8 <umohnani@redhat.com>

Closes: #153
Approved by: rhatdan
This commit is contained in:
umohnani8
2017-12-18 21:30:12 -05:00
committed by Atomic Bot
parent d43c63aad7
commit 0a2f426ceb

View File

@ -2,6 +2,7 @@ package main
import (
"fmt"
"os"
"github.com/pkg/errors"
"github.com/projectatomic/libpod/libpod"
@ -49,7 +50,9 @@ func rmiCmd(c *cli.Context) error {
if len(args) > 0 && removeAll {
return errors.Errorf("when using the --all switch, you may not pass any images names or IDs")
}
imagesToDelete := args[:]
var lastError error
if removeAll {
localImages, err := runtime.GetImages(&libpod.ImageFilterParams{})
if err != nil {
@ -63,13 +66,21 @@ func rmiCmd(c *cli.Context) error {
for _, arg := range imagesToDelete {
image, err := runtime.GetImage(arg)
if err != nil {
return errors.Wrapf(err, "could not get image %q", arg)
if lastError != nil {
fmt.Fprintln(os.Stderr, lastError)
}
lastError = errors.Wrapf(err, "could not get image %q", arg)
continue
}
id, err := runtime.RemoveImage(image, c.Bool("force"))
if err != nil {
return errors.Wrapf(err, "error removing image %q", id)
if lastError != nil {
fmt.Fprintln(os.Stderr, lastError)
}
lastError = errors.Wrapf(err, "failed to remove image")
} else {
fmt.Println(id)
}
fmt.Printf("%s\n", id)
}
return nil
return lastError
}