Remove ambiguity for unsupported official repository input
Officials repositories always have 2 part names with the first part being library and second part being the offical repository name. Names with more than 2 parts should not hit the special case for official repositories since they are not valid official repositories. Add tests for this ambiguity and to ensure that 3 part names are supports for the default repository, as used by the docker store. Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
This commit is contained in:
parent
ff68ca391b
commit
24cbdc41ba
2 changed files with 35 additions and 3 deletions
|
@ -12,7 +12,7 @@ import (
|
||||||
var (
|
var (
|
||||||
legacyDefaultDomain = "index.docker.io"
|
legacyDefaultDomain = "index.docker.io"
|
||||||
defaultDomain = "docker.io"
|
defaultDomain = "docker.io"
|
||||||
defaultRepoPrefix = "library/"
|
officialRepoName = "library"
|
||||||
defaultTag = "latest"
|
defaultTag = "latest"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ func splitDockerDomain(name string) (domain, remainder string) {
|
||||||
domain = defaultDomain
|
domain = defaultDomain
|
||||||
}
|
}
|
||||||
if domain == defaultDomain && !strings.ContainsRune(remainder, '/') {
|
if domain == defaultDomain && !strings.ContainsRune(remainder, '/') {
|
||||||
remainder = defaultRepoPrefix + remainder
|
remainder = officialRepoName + "/" + remainder
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,10 @@ func familiarizeName(named namedRepository) repository {
|
||||||
|
|
||||||
if repo.domain == defaultDomain {
|
if repo.domain == defaultDomain {
|
||||||
repo.domain = ""
|
repo.domain = ""
|
||||||
repo.path = strings.TrimPrefix(repo.path, defaultRepoPrefix)
|
// Handle official repositories which have the pattern "library/<official repo name>"
|
||||||
|
if split := strings.Split(repo.path, "/"); len(split) == 2 && split[0] == officialRepoName {
|
||||||
|
repo.path = split[1]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return repo
|
return repo
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,6 +208,20 @@ func TestParseRepositoryInfo(t *testing.T) {
|
||||||
AmbiguousName: "index.docker.io/library/ubuntu-12.04-base",
|
AmbiguousName: "index.docker.io/library/ubuntu-12.04-base",
|
||||||
Domain: "docker.io",
|
Domain: "docker.io",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
RemoteName: "library/foo/bar",
|
||||||
|
FamiliarName: "library/foo/bar",
|
||||||
|
FullName: "docker.io/library/foo/bar",
|
||||||
|
AmbiguousName: "",
|
||||||
|
Domain: "docker.io",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
RemoteName: "store/foo/bar",
|
||||||
|
FamiliarName: "store/foo/bar",
|
||||||
|
FullName: "docker.io/store/foo/bar",
|
||||||
|
AmbiguousName: "",
|
||||||
|
Domain: "docker.io",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tcase := range tcases {
|
for _, tcase := range tcases {
|
||||||
|
@ -483,6 +497,21 @@ func TestNormalizedSplitHostname(t *testing.T) {
|
||||||
domain: "xn--n3h.com:18080",
|
domain: "xn--n3h.com:18080",
|
||||||
name: "foo",
|
name: "foo",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
input: "docker.io/foo",
|
||||||
|
domain: "docker.io",
|
||||||
|
name: "library/foo",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "docker.io/library/foo",
|
||||||
|
domain: "docker.io",
|
||||||
|
name: "library/foo",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "docker.io/library/foo/bar",
|
||||||
|
domain: "docker.io",
|
||||||
|
name: "library/foo/bar",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, testcase := range testcases {
|
for _, testcase := range testcases {
|
||||||
failf := func(format string, v ...interface{}) {
|
failf := func(format string, v ...interface{}) {
|
||||||
|
|
Loading…
Reference in a new issue