diff --git a/server.go b/server.go index 5e30dd0118..5e019a4c37 100644 --- a/server.go +++ b/server.go @@ -242,7 +242,7 @@ func (srv *Server) Images(all bool, filter string) ([]APIImages, error) { } } - sortImagesByCreation(outs) + sortImagesByCreationAndTag(outs) return outs, nil } diff --git a/sorter.go b/sorter.go index a61be0ef75..a818841486 100644 --- a/sorter.go +++ b/sorter.go @@ -22,15 +22,15 @@ func (s *imageSorter) Less(i, j int) bool { return s.by(&s.images[i], &s.images[j]) } -// Sort []ApiImages by most recent creation date. -func sortImagesByCreation(images []APIImages) { - creation := func(i1, i2 *APIImages) bool { - return i1.Created > i2.Created +// Sort []ApiImages by most recent creation date and tag name. +func sortImagesByCreationAndTag(images []APIImages) { + creationAndTag := func(i1, i2 *APIImages) bool { + return i1.Created > i2.Created || (i1.Created == i2.Created && i2.Tag > i1.Tag) } sorter := &imageSorter{ images: images, - by: creation} + by: creationAndTag} sort.Sort(sorter) } diff --git a/sorter_test.go b/sorter_test.go index 3c4b3b4874..5519708ece 100644 --- a/sorter_test.go +++ b/sorter_test.go @@ -4,7 +4,7 @@ import ( "testing" ) -func TestServerListOrderedImages(t *testing.T) { +func TestServerListOrderedImagesByCreationDate(t *testing.T) { runtime := mkRuntime(t) defer nuke(runtime) @@ -28,3 +28,30 @@ func TestServerListOrderedImages(t *testing.T) { t.Error("Expected []APIImges to be ordered by most recent creation date.") } } + +func TestServerListOrderedImagesByCreationDateAndTag(t *testing.T) { + runtime := mkRuntime(t) + defer nuke(runtime) + + archive, err := fakeTar() + if err != nil { + t.Fatal(err) + } + image, err := runtime.graph.Create(archive, nil, "Testing", "", nil) + if err != nil { + t.Fatal(err) + } + + srv := &Server{runtime: runtime} + srv.ContainerTag(image.ID, "repo", "foo", false) + srv.ContainerTag(image.ID, "repo", "bar", false) + + images, err := srv.Images(true, "") + if err != nil { + t.Fatal(err) + } + + if images[0].Created != images[1].Created || images[0].Tag >= images[1].Tag { + t.Error("Expected []APIImges to be ordered by most recent creation date and tag name.") + } +}