Merge pull request #38574 from StefanScherer/improve-no-matching-manifest-error

Improve 'no matching manifest' error message
This commit is contained in:
Brian Goff 2019-02-01 21:03:37 -08:00 committed by GitHub
commit 50e63adf30
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 39 additions and 1 deletions

View file

@ -756,7 +756,7 @@ func (p *v2Puller) pullManifestList(ctx context.Context, ref reference.Named, mf
manifestMatches := filterManifests(mfstList.Manifests, platform)
if len(manifestMatches) == 0 {
errMsg := fmt.Sprintf("no matching manifest for %s in the manifest list entries", platforms.Format(platform))
errMsg := fmt.Sprintf("no matching manifest for %s in the manifest list entries", formatPlatform(platform))
logrus.Debugf(errMsg)
return "", "", errors.New(errMsg)
}

View file

@ -2,8 +2,10 @@ package distribution // import "github.com/docker/docker/distribution"
import (
"encoding/json"
"fmt"
"io/ioutil"
"reflect"
"regexp"
"runtime"
"strings"
"testing"
@ -11,6 +13,7 @@ import (
"github.com/docker/distribution/manifest/schema1"
"github.com/docker/distribution/reference"
"github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go/v1"
"gotest.tools/assert"
is "gotest.tools/assert/cmp"
)
@ -182,3 +185,23 @@ func TestValidateManifest(t *testing.T) {
t.Fatal("expected validateManifest to fail with digest error")
}
}
func TestFormatPlatform(t *testing.T) {
var platform specs.Platform
var result = formatPlatform(platform)
if strings.HasPrefix(result, "unknown") {
t.Fatal("expected formatPlatform to show a known platform")
}
if !strings.HasPrefix(result, runtime.GOOS) {
t.Fatal("expected formatPlatform to show the current platform")
}
if runtime.GOOS == "windows" {
if !strings.HasPrefix(result, "windows") {
t.Fatal("expected formatPlatform to show windows platform")
}
matches, _ := regexp.MatchString("windows.* [0-9]", result)
if !matches {
t.Fatal(fmt.Sprintf("expected formatPlatform to show windows platform with a version, but got '%s'", result))
}
}
}

View file

@ -58,3 +58,10 @@ func withDefault(p specs.Platform) specs.Platform {
}
return p
}
func formatPlatform(platform specs.Platform) string {
if platform.OS == "" {
platform = platforms.DefaultSpec()
}
return platforms.Format(platform)
}

View file

@ -11,6 +11,7 @@ import (
"strconv"
"strings"
"github.com/containerd/containerd/platforms"
"github.com/docker/distribution"
"github.com/docker/distribution/manifest/manifestlist"
"github.com/docker/distribution/manifest/schema2"
@ -136,3 +137,10 @@ func checkImageCompatibility(imageOS, imageOSVersion string) error {
}
return nil
}
func formatPlatform(platform specs.Platform) string {
if platform.OS == "" {
platform = platforms.DefaultSpec()
}
return fmt.Sprintf("%s %s", platforms.Format(platform), system.GetOSVersion().ToString())
}