Bläddra i källkod

Vendor updated distribution

The only changes are https://github.com/docker/distribution/pull/1379
and https://github.com/docker/distribution/pull/1380.

Fixes #19476

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Aaron Lehmann 9 år sedan
förälder
incheckning
a160dd4987

+ 1 - 1
hack/vendor.sh

@@ -46,7 +46,7 @@ clone git github.com/boltdb/bolt v1.1.0
 clone git github.com/miekg/dns 75e6e86cc601825c5dbcd4e0c209eab180997cd7
 
 # get graph and distribution packages
-clone git github.com/docker/distribution 47a064d4195a9b56133891bbb13620c3ac83a827
+clone git github.com/docker/distribution 08650825fef9f21ea819972fb2ed875c0832a255
 clone git github.com/vbatts/tar-split v0.9.11
 
 # get desired notary commit, might also need to be updated in Dockerfile

+ 3 - 1
vendor/src/github.com/docker/distribution/manifests.go

@@ -69,7 +69,9 @@ type Describable interface {
 // ManifestMediaTypes returns the supported media types for manifests.
 func ManifestMediaTypes() (mediaTypes []string) {
 	for t := range mappings {
-		mediaTypes = append(mediaTypes, t)
+		if t != "" {
+			mediaTypes = append(mediaTypes, t)
+		}
 	}
 	return
 }

+ 9 - 0
vendor/src/github.com/docker/distribution/registry/api/errcode/errors.go

@@ -69,6 +69,15 @@ func (ec *ErrorCode) UnmarshalText(text []byte) error {
 	return nil
 }
 
+// WithMessage creates a new Error struct based on the passed-in info and
+// overrides the Message property.
+func (ec ErrorCode) WithMessage(message string) Error {
+	return Error{
+		Code:    ec,
+		Message: message,
+	}
+}
+
 // WithDetail creates a new Error struct based on the passed-in info and
 // set the Detail property appropriately
 func (ec ErrorCode) WithDetail(detail interface{}) Error {

+ 16 - 3
vendor/src/github.com/docker/distribution/registry/client/errors.go

@@ -31,13 +31,26 @@ func (e *UnexpectedHTTPResponseError) Error() string {
 	return fmt.Sprintf("Error parsing HTTP response: %s: %q", e.ParseErr.Error(), string(e.Response))
 }
 
-func parseHTTPErrorResponse(r io.Reader) error {
+func parseHTTPErrorResponse(statusCode int, r io.Reader) error {
 	var errors errcode.Errors
 	body, err := ioutil.ReadAll(r)
 	if err != nil {
 		return err
 	}
 
+	// For backward compatibility, handle irregularly formatted
+	// messages that contain a "details" field.
+	var detailsErr struct {
+		Details string `json:"details"`
+	}
+	err = json.Unmarshal(body, &detailsErr)
+	if err == nil && detailsErr.Details != "" {
+		if statusCode == http.StatusUnauthorized {
+			return errcode.ErrorCodeUnauthorized.WithMessage(detailsErr.Details)
+		}
+		return errcode.ErrorCodeUnknown.WithMessage(detailsErr.Details)
+	}
+
 	if err := json.Unmarshal(body, &errors); err != nil {
 		return &UnexpectedHTTPResponseError{
 			ParseErr: err,
@@ -53,14 +66,14 @@ func parseHTTPErrorResponse(r io.Reader) error {
 // range.
 func HandleErrorResponse(resp *http.Response) error {
 	if resp.StatusCode == 401 {
-		err := parseHTTPErrorResponse(resp.Body)
+		err := parseHTTPErrorResponse(resp.StatusCode, resp.Body)
 		if uErr, ok := err.(*UnexpectedHTTPResponseError); ok {
 			return errcode.ErrorCodeUnauthorized.WithDetail(uErr.Response)
 		}
 		return err
 	}
 	if resp.StatusCode >= 400 && resp.StatusCode < 500 {
-		return parseHTTPErrorResponse(resp.Body)
+		return parseHTTPErrorResponse(resp.StatusCode, resp.Body)
 	}
 	return &UnexpectedHTTPStatusError{Status: resp.Status}
 }