fix v2 manifest fetch

Signed-off-by: Jess Frazelle <acidburn@google.com>
This commit is contained in:
Jess Frazelle 2017-03-01 15:39:18 -08:00
parent f21664c81a
commit cd61a71fad
No known key found for this signature in database
GPG key ID: 18F3685C0022BFF3
4 changed files with 19 additions and 10 deletions

View file

@ -19,7 +19,7 @@ func (r *Registry) Catalog(u string) ([]string, error) {
r.Logf("registry.catalog url=%s", uri)
var response catalogResponse
h, err := r.getJSON(uri, &response)
h, err := r.getJSON(uri, &response, false)
if err != nil {
return nil, err
}

View file

@ -1,6 +1,7 @@
package registry
import (
"net/url"
"strings"
"github.com/docker/distribution/manifest/schema1"
@ -9,11 +10,11 @@ import (
// Manifest returns the manifest for a specific repository:tag.
func (r *Registry) Manifest(repository, ref string) (interface{}, error) {
url := r.url("/v2/%s/manifests/%s", repository, ref)
r.Logf("registry.manifests url=%s repository=%s ref=%s", url, repository, ref)
uri := r.url("/v2/%s/manifests/%s", repository, url.PathEscape(ref))
r.Logf("registry.manifests uri=%s repository=%s ref=%s", uri, repository, ref)
var m schema2.Manifest
h, err := r.getJSON(url, &m)
h, err := r.getJSON(uri, &m, true)
if err != nil {
return m, err
}
@ -32,11 +33,11 @@ func (r *Registry) Manifest(repository, ref string) (interface{}, error) {
// ManifestV1 gets the registry v1 manifest.
func (r *Registry) ManifestV1(repository, ref string) (schema1.SignedManifest, error) {
url := r.url("/v2/%s/manifests/%s", repository, ref)
r.Logf("registry.manifests url=%s repository=%s ref=%s", url, repository, ref)
uri := r.url("/v2/%s/manifests/%s", repository, url.PathEscape(ref))
r.Logf("registry.manifests uri=%s repository=%s ref=%s", uri, repository, ref)
var m schema1.SignedManifest
if _, err := r.getJSON(url, &m); err != nil {
if _, err := r.getJSON(uri, &m, false); err != nil {
return m, err
}

View file

@ -99,8 +99,16 @@ func (r *Registry) url(pathTemplate string, args ...interface{}) string {
return url
}
func (r *Registry) getJSON(url string, response interface{}) (http.Header, error) {
resp, err := r.Client.Get(url)
func (r *Registry) getJSON(url string, response interface{}, addV2Header bool) (http.Header, error) {
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
if addV2Header {
req.Header.Add("Accept", "application/vnd.docker.distribution.manifest.v2+json")
req.Header.Add("Accept", "application/vnd.docker.distribution.manifest.list.v2+json")
}
resp, err := r.Client.Do(req)
if err != nil {
return nil, err
}

View file

@ -10,7 +10,7 @@ func (r *Registry) Tags(repository string) ([]string, error) {
r.Logf("registry.tags url=%s repository=%s", url, repository)
var response tagsResponse
if _, err := r.getJSON(url, &response); err != nil {
if _, err := r.getJSON(url, &response, false); err != nil {
return nil, err
}