mirror of https://github.com/docker/docs.git
Issue #79, add regexp to the CmdRmi command
This commit is contained in:
parent
c65c1738b5
commit
3cd34f1039
26
commands.go
26
commands.go
|
@ -356,30 +356,28 @@ func (srv *Server) CmdPort(stdin io.ReadCloser, stdout io.Writer, args ...string
|
||||||
}
|
}
|
||||||
|
|
||||||
// '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) (err error) {
|
||||||
cmd := rcli.Subcmd(stdout, "rmimage", "[OPTIONS] IMAGE", "Remove an image")
|
cmd := rcli.Subcmd(stdout, "rmimage", "[OPTIONS] IMAGE", "Remove an image")
|
||||||
fl_all := cmd.Bool("a", false, "Use IMAGE as a path and remove ALL images in this path")
|
fl_all := cmd.Bool("a", false, "Use IMAGE as a path and remove ALL images in this path")
|
||||||
if err := cmd.Parse(args); err != nil {
|
fl_regexp := cmd.Bool("r", false, "Use IMAGE as a regular expression instead of an exact name")
|
||||||
cmd.Usage()
|
if cmd.Parse(args) != nil || cmd.NArg() < 1 {
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if cmd.NArg() < 1 {
|
|
||||||
cmd.Usage()
|
cmd.Usage()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, name := range cmd.Args() {
|
for _, name := range cmd.Args() {
|
||||||
var err error
|
if *fl_regexp {
|
||||||
if *fl_all {
|
err = srv.images.RemoveRegexp(name)
|
||||||
|
} else if *fl_all {
|
||||||
err = srv.images.RemoveInPath(name)
|
err = srv.images.RemoveInPath(name)
|
||||||
} else {
|
} else {
|
||||||
image, err := srv.images.Get(name)
|
if image, err1 := srv.images.Find(name); err1 != nil {
|
||||||
if err != nil {
|
err = err1
|
||||||
return err
|
} else if err1 == nil && image == nil {
|
||||||
} else if image == nil {
|
err = fmt.Errorf("No such image: %s", name)
|
||||||
return errors.New("No such image: " + name)
|
} else {
|
||||||
}
|
|
||||||
err = srv.images.Remove(image)
|
err = srv.images.Remove(image)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
23
fs/store.go
23
fs/store.go
|
@ -11,6 +11,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
@ -105,6 +106,28 @@ func (store *Store) RemoveInPath(pth string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteMatch deletes all images whose name matches `pattern`
|
||||||
|
func (store *Store) RemoveRegexp(pattern string) error {
|
||||||
|
// Retrieve all the paths
|
||||||
|
paths, err := store.Paths()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// Check the pattern on each elements
|
||||||
|
for _, pth := range paths {
|
||||||
|
if match, err := regexp.MatchString(pattern, pth); err != nil {
|
||||||
|
return err
|
||||||
|
} else if match {
|
||||||
|
// If there is a match, remove it
|
||||||
|
fmt.Printf("Match: %s %s\n", pth, pattern)
|
||||||
|
if err := store.RemoveInPath(pth); err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (store *Store) Remove(img *Image) error {
|
func (store *Store) Remove(img *Image) error {
|
||||||
_, err := store.orm.Delete(img)
|
_, err := store.orm.Delete(img)
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue