Merge pull request #65 from runcom/fix-headers

provide a way to pass multi values-single key headers
This commit is contained in:
Miloslav Trmač 2016-05-19 18:43:25 +02:00
commit 532fae24ac
2 changed files with 7 additions and 5 deletions

View File

@ -78,7 +78,7 @@ func newDockerClient(refHostname, certPath string, tlsVerify bool) (*dockerClien
}, nil }, nil
} }
func (c *dockerClient) makeRequest(method, url string, headers map[string]string, stream io.Reader) (*http.Response, error) { func (c *dockerClient) makeRequest(method, url string, headers map[string][]string, stream io.Reader) (*http.Response, error) {
if c.scheme == "" { if c.scheme == "" {
pr, err := c.ping() pr, err := c.ping()
if err != nil { if err != nil {
@ -95,7 +95,9 @@ func (c *dockerClient) makeRequest(method, url string, headers map[string]string
} }
req.Header.Set("Docker-Distribution-API-Version", "registry/2.0") req.Header.Set("Docker-Distribution-API-Version", "registry/2.0")
for n, h := range headers { for n, h := range headers {
req.Header.Add(n, h) for _, hh := range h {
req.Header.Add(n, hh)
}
} }
if c.wwwAuthenticate != "" { if c.wwwAuthenticate != "" {
if err := c.setupRequestAuth(req); err != nil { if err := c.setupRequestAuth(req); err != nil {

View File

@ -49,10 +49,10 @@ func (d *dockerImageDestination) PutManifest(manifest []byte) error {
} }
url := fmt.Sprintf(manifestURL, d.ref.RemoteName(), digest) url := fmt.Sprintf(manifestURL, d.ref.RemoteName(), digest)
headers := map[string]string{} headers := map[string][]string{}
mimeType := utils.GuessManifestMIMEType(manifest) mimeType := utils.GuessManifestMIMEType(manifest)
if mimeType != "" { if mimeType != "" {
headers["Content-Type"] = mimeType headers["Content-Type"] = []string{mimeType}
} }
res, err := d.c.makeRequest("PUT", url, headers, bytes.NewReader(manifest)) res, err := d.c.makeRequest("PUT", url, headers, bytes.NewReader(manifest))
if err != nil { if err != nil {
@ -89,7 +89,7 @@ func (d *dockerImageDestination) PutLayer(digest string, stream io.Reader) error
uploadURL := fmt.Sprintf(blobUploadURL, d.ref.RemoteName(), digest) uploadURL := fmt.Sprintf(blobUploadURL, d.ref.RemoteName(), digest)
logrus.Debugf("Uploading %s", uploadURL) logrus.Debugf("Uploading %s", uploadURL)
// FIXME: Set Content-Length? // FIXME: Set Content-Length?
res, err = d.c.makeRequest("POST", uploadURL, map[string]string{"Content-Type": "application/octet-stream"}, stream) res, err = d.c.makeRequest("POST", uploadURL, map[string][]string{"Content-Type": {"application/octet-stream"}}, stream)
if err != nil { if err != nil {
return err return err
} }