From 35bcba80116668864380319d9b6fe0249cefd114 Mon Sep 17 00:00:00 2001 From: Martin Redmond Date: Fri, 6 Sep 2013 15:51:49 -0400 Subject: [PATCH 1/2] improve image listing --- server.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server.go b/server.go index 69edabf07a..6db1c63928 100644 --- a/server.go +++ b/server.go @@ -210,8 +210,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 From b44d11312054d1d7bc0f0bbc8eeaddc2d30c26cc Mon Sep 17 00:00:00 2001 From: Martin Redmond Date: Fri, 6 Sep 2013 16:16:10 -0400 Subject: [PATCH 2/2] filter image listing using path.Match --- server.go | 4 ++-- server_test.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/server.go b/server.go index 6db1c63928..a48d590653 100644 --- a/server.go +++ b/server.go @@ -211,7 +211,7 @@ 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 != "" { - if match, _ := path.Match ( filter, name ); !match { + if match, _ := path.Match(filter, name); !match { continue } } @@ -681,7 +681,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 95ebcf2459..ad87b4d0a3 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") + } +}