Skip to content

Commit 232330d

Browse files
committed
Bug 1422376: Fix resolving ImageStreamImage latest tag
1 parent cf5b77f commit 232330d

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

pkg/image/api/helper.go

+10-12
Original file line numberDiff line numberDiff line change
@@ -553,10 +553,8 @@ func LatestImageTagEvent(stream *ImageStream, imageID string) (string, *TagEvent
553553
continue
554554
}
555555
for i, event := range events.Items {
556-
if event.Image != imageID {
557-
continue
558-
}
559-
if latestTagEvent == nil || (latestTagEvent != nil && event.Created.After(latestTagEvent.Created.Time)) {
556+
if digestOrImageMatch(event.Image, imageID) &&
557+
(latestTagEvent == nil || latestTagEvent != nil && event.Created.After(latestTagEvent.Created.Time)) {
560558
latestTagEvent = &events.Items[i]
561559
latestTag = tag
562560
}
@@ -845,6 +843,13 @@ func UpdateTrackingTags(stream *ImageStream, updatedTag string, updatedImage Tag
845843
return updated
846844
}
847845

846+
func digestOrImageMatch(image, imageID string) bool {
847+
if d, err := digest.ParseDigest(image); err == nil {
848+
return strings.HasPrefix(d.Hex(), imageID) || strings.HasPrefix(image, imageID)
849+
}
850+
return strings.HasPrefix(image, imageID)
851+
}
852+
848853
// ResolveImageID returns latest TagEvent for specified imageID and an error if
849854
// there's more than one image matching the ID or when one does not exist.
850855
func ResolveImageID(stream *ImageStream, imageID string) (*TagEvent, error) {
@@ -853,14 +858,7 @@ func ResolveImageID(stream *ImageStream, imageID string) (*TagEvent, error) {
853858
for _, history := range stream.Status.Tags {
854859
for i := range history.Items {
855860
tagging := &history.Items[i]
856-
if d, err := digest.ParseDigest(tagging.Image); err == nil {
857-
if strings.HasPrefix(d.Hex(), imageID) || strings.HasPrefix(tagging.Image, imageID) {
858-
event = tagging
859-
set.Insert(tagging.Image)
860-
}
861-
continue
862-
}
863-
if strings.HasPrefix(tagging.Image, imageID) {
861+
if digestOrImageMatch(tagging.Image, imageID) {
864862
event = tagging
865863
set.Insert(tagging.Image)
866864
}

pkg/image/api/helper_test.go

+8
Original file line numberDiff line numberDiff line change
@@ -1807,6 +1807,14 @@ func TestDockerImageReferenceForImage(t *testing.T) {
18071807
t.Errorf("expected source reference to be 'test/foo@sha256:bar', got %q", reference)
18081808
}
18091809

1810+
reference, ok = DockerImageReferenceForImage(mockImageStream(SourceTagReferencePolicy), "c3d8a3642ebfa6bd1fd50c2b8b90e99d3e29af1eac88637678f982cde90993fb")
1811+
if !ok {
1812+
t.Fatalf("expected success for source tag policy")
1813+
}
1814+
if reference != "test/foo@sha256:bar" {
1815+
t.Errorf("expected source reference to be 'test/foo@sha256:bar', got %q", reference)
1816+
}
1817+
18101818
reference, ok = DockerImageReferenceForImage(mockImageStream(LocalTagReferencePolicy), "sha256:c3d8a3642ebfa6bd1fd50c2b8b90e99d3e29af1eac88637678f982cde90993fb")
18111819
if !ok {
18121820
t.Fatalf("expected success for local reference policy")

0 commit comments

Comments
 (0)