diff --git a/server.go b/server.go index f662ad8a5..f108fbaec 100644 --- a/server.go +++ b/server.go @@ -209,8 +209,10 @@ func (srv *Server) Images(all bool, filter string) ([]APIImages, error) { } outs := []APIImages{} //produce [] when empty instead of 'null' for name, repository := range srv.runtime.repositories.Repositories { - if filter != "" && name != filter { - continue + if filter != "" { + if match, _ := path.Match(filter, name); !match { + continue + } } for tag, id := range repository { var out APIImages @@ -678,7 +680,7 @@ func (srv *Server) getImageList(localRepo map[string]string) ([][]*registry.ImgD depGraph.NewNode(img.ID) img.WalkHistory(func(current *Image) error { imgList[current.ID] = ®istry.ImgData{ - ID: current.ID, + ID: current.ID, Tag: tag, } parent, err := current.GetParent() diff --git a/server_test.go b/server_test.go index 95ebcf245..ad87b4d0a 100644 --- a/server_test.go +++ b/server_test.go @@ -431,3 +431,57 @@ func TestRmi(t *testing.T) { } } } + +func TestImagesFilter(t *testing.T) { + runtime := mkRuntime(t) + defer nuke(runtime) + + srv := &Server{runtime: runtime} + + if err := srv.runtime.repositories.Set("utest", "tag1", unitTestImageName, false); err != nil { + t.Fatal(err) + } + + if err := srv.runtime.repositories.Set("utest/docker", "tag2", unitTestImageName, false); err != nil { + t.Fatal(err) + } + if err := srv.runtime.repositories.Set("utest:5000/docker", "tag3", unitTestImageName, false); err != nil { + t.Fatal(err) + } + + images, err := srv.Images(false, "utest*/*") + if err != nil { + t.Fatal(err) + } + + if len(images) != 2 { + t.Fatal("incorrect number of matches returned") + } + + images, err = srv.Images(false, "utest") + if err != nil { + t.Fatal(err) + } + + if len(images) != 1 { + t.Fatal("incorrect number of matches returned") + } + + images, err = srv.Images(false, "utest*") + if err != nil { + t.Fatal(err) + } + + if len(images) != 1 { + t.Fatal("incorrect number of matches returned") + } + + images, err = srv.Images(false, "*5000*/*") + if err != nil { + t.Fatal(err) + } + + if len(images) != 1 { + t.Fatal("incorrect number of matches returned") + } +}