Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion directory/directory_src.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func (s *dirImageSource) IntendedDockerReference() string {
}

// it's up to the caller to determine the MIME type of the returned manifest's bytes
func (s *dirImageSource) GetManifest(_ []string) ([]byte, string, error) {
func (s *dirImageSource) GetManifest(_ []string, _ string) ([]byte, string, error) {
m, err := ioutil.ReadFile(manifestPath(s.dir))
if err != nil {
return nil, "", err
Expand Down
2 changes: 1 addition & 1 deletion directory/directory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func TestGetPutManifest(t *testing.T) {
assert.NoError(t, err)

src := NewDirImageSource(tmpDir)
m, mt, err := src.GetManifest(nil)
m, mt, err := src.GetManifest(nil, "")
assert.NoError(t, err)
assert.Equal(t, man, m)
assert.Equal(t, "", mt)
Expand Down
7 changes: 5 additions & 2 deletions docker/docker_image_src.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,11 @@ func simplifyContentType(contentType string) string {
return mimeType
}

func (s *dockerImageSource) GetManifest(mimetypes []string) ([]byte, string, error) {
url := fmt.Sprintf(manifestURL, s.ref.RemoteName(), s.tag)
func (s *dockerImageSource) GetManifest(mimetypes []string, reference string) ([]byte, string, error) {
if reference == "" {
reference = s.tag
}
url := fmt.Sprintf(manifestURL, s.ref.RemoteName(), reference)
// TODO(runcom) set manifest version header! schema1 for now - then schema2 etc etc and v1
// TODO(runcom) NO, switch on the resulter manifest like Docker is doing
headers := make(map[string][]string)
Expand Down
5 changes: 4 additions & 1 deletion image/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,10 @@ func (i *genericImage) IntendedDockerReference() string {
// NOTE: It is essential for signature verification that Manifest returns the manifest from which BlobDigests is computed.
func (i *genericImage) Manifest() ([]byte, string, error) {
if i.cachedManifest == nil {
m, mt, err := i.src.GetManifest([]string{manifest.DockerV2Schema1SignedMIMEType, manifest.DockerV2Schema1MIMEType})
m, mt, err := i.src.GetManifest([]string{
manifest.DockerV2Schema1SignedMIMEType,
manifest.DockerV2Schema1MIMEType,
}, "")
if err != nil {
return nil, "", err
}
Expand Down
4 changes: 2 additions & 2 deletions openshift/openshift.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,11 +193,11 @@ func (s *openshiftImageSource) IntendedDockerReference() string {
return s.client.canonicalDockerReference()
}

func (s *openshiftImageSource) GetManifest(mimetypes []string) ([]byte, string, error) {
func (s *openshiftImageSource) GetManifest(mimetypes []string, reference string) ([]byte, string, error) {
if err := s.ensureImageIsResolved(); err != nil {
return nil, "", err
}
return s.docker.GetManifest(mimetypes)
return s.docker.GetManifest(mimetypes, reference)
}

func (s *openshiftImageSource) GetBlob(digest string) (io.ReadCloser, int64, error) {
Expand Down
3 changes: 2 additions & 1 deletion types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ type ImageSource interface {
// May be "" if unknown.
IntendedDockerReference() string
// GetManifest returns the image's manifest along with its MIME type. The empty string is returned if the MIME type is unknown. The slice parameter indicates the supported mime types the manifest should be when getting it.
// The string parameter indicates the reference to be looking for when getting a manifest.
// It may use a remote (= slow) service.
GetManifest([]string) ([]byte, string, error)
GetManifest([]string, string) ([]byte, string, error)
// Note: Calling GetBlob() may have ordering dependencies WRT other methods of this type. FIXME: How does this work with (docker save) on stdin?
// the second return value is the size of the blob. If not known 0 is returned
GetBlob(digest string) (io.ReadCloser, int64, error)
Expand Down