mirror of https://github.com/docker/docs.git
docker rmi -r: remove all images matching a regexp
This commit is contained in:
parent
711e29fb9b
commit
74c88fdbc0
|
@ -9,6 +9,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -209,6 +210,32 @@ func (index *Index) Delete(name string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteMatch deletes all images whose name matches `pattern`
|
||||||
|
func (index *Index) DeleteMatch(pattern string) error {
|
||||||
|
// Load
|
||||||
|
if err := index.load(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for name, history := range index.ByName {
|
||||||
|
if match, err := regexp.MatchString(pattern, name); err != nil {
|
||||||
|
return err
|
||||||
|
} else if match {
|
||||||
|
fmt.Printf("Match: %s %s\n", name, pattern)
|
||||||
|
// Remove from index lookup
|
||||||
|
for _, image := range *history {
|
||||||
|
delete(index.ById, image.Id)
|
||||||
|
}
|
||||||
|
// Remove from name lookup
|
||||||
|
delete(index.ByName, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Save
|
||||||
|
if err := index.save(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (index *Index) Names() []string {
|
func (index *Index) Names() []string {
|
||||||
if err := index.load(); err != nil {
|
if err := index.load(); err != nil {
|
||||||
return []string{}
|
return []string{}
|
||||||
|
|
|
@ -314,6 +314,7 @@ func (srv *Server) CmdInspect(stdin io.ReadCloser, stdout io.Writer, args ...str
|
||||||
// 'docker rmi NAME' removes all images with the name NAME
|
// 'docker rmi NAME' removes all images with the name NAME
|
||||||
func (srv *Server) CmdRmi(stdin io.ReadCloser, stdout io.Writer, args ...string) error {
|
func (srv *Server) CmdRmi(stdin io.ReadCloser, stdout io.Writer, args ...string) error {
|
||||||
cmd := rcli.Subcmd(stdout, "rmimage", "[OPTIONS] IMAGE", "Remove an image")
|
cmd := rcli.Subcmd(stdout, "rmimage", "[OPTIONS] IMAGE", "Remove an image")
|
||||||
|
fl_regexp := cmd.Bool("r", false, "Use IMAGE as a regular expression instead of an exact name")
|
||||||
if err := cmd.Parse(args); err != nil {
|
if err := cmd.Parse(args); err != nil {
|
||||||
cmd.Usage()
|
cmd.Usage()
|
||||||
return nil
|
return nil
|
||||||
|
@ -323,11 +324,17 @@ func (srv *Server) CmdRmi(stdin io.ReadCloser, stdout io.Writer, args ...string)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, name := range cmd.Args() {
|
for _, name := range cmd.Args() {
|
||||||
|
var err error
|
||||||
|
if *fl_regexp {
|
||||||
|
err = srv.images.DeleteMatch(name)
|
||||||
|
} else {
|
||||||
image := srv.images.Find(name)
|
image := srv.images.Find(name)
|
||||||
if image == nil {
|
if image == nil {
|
||||||
return errors.New("No such image: " + name)
|
return errors.New("No such image: " + name)
|
||||||
}
|
}
|
||||||
if err := srv.images.Delete(name); err != nil {
|
err = srv.images.Delete(name)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue