mirror of
https://github.com/docker/docs.git
synced 2026-10-31 10:34:26 +03:00
Use ParseRepositoryTags from engine.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
2
Godeps/Godeps.json
generated
2
Godeps/Godeps.json
generated
@@ -40,7 +40,7 @@
|
||||
"Rev": "c7a04fda2ad804601385f054c19b69cf43fcfe46"
|
||||
},
|
||||
{
|
||||
"ImportPath": "github.com/docker/docker/pkg/parsers/filters",
|
||||
"ImportPath": "github.com/docker/docker/pkg/parsers",
|
||||
"Comment": "v1.4.1-3245-g443437f",
|
||||
"Rev": "443437f5ea04da9d62bf3e05d7951f7d30e77d96"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,7 @@ package cluster
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/docker/docker/pkg/parsers"
|
||||
"github.com/samalba/dockerclient"
|
||||
)
|
||||
|
||||
@@ -13,59 +14,24 @@ type Image struct {
|
||||
Engine *Engine
|
||||
}
|
||||
|
||||
func toImageName(repo string, name string, tag string) string {
|
||||
fullname := name
|
||||
if tag != "" {
|
||||
fullname = name + ":" + tag
|
||||
}
|
||||
if repo != "" {
|
||||
fullname = repo + "/" + fullname
|
||||
}
|
||||
return fullname
|
||||
}
|
||||
|
||||
func parseImageName(fullname string) (repo string, name string, tag string) {
|
||||
parts := strings.SplitN(fullname, "/", 2)
|
||||
|
||||
nameAndTag := parts[0]
|
||||
if len(parts) == 2 {
|
||||
repo = parts[0]
|
||||
nameAndTag = parts[1]
|
||||
}
|
||||
|
||||
parts = strings.SplitN(nameAndTag, ":", 2)
|
||||
name = parts[0]
|
||||
if len(parts) == 2 {
|
||||
tag = parts[1]
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Match is exported
|
||||
func (image *Image) Match(IDOrName string, matchTag bool) bool {
|
||||
size := len(IDOrName)
|
||||
|
||||
// TODO: prefix match can cause false positives with image names
|
||||
if image.Id == IDOrName || (size > 2 && strings.HasPrefix(image.Id, IDOrName)) {
|
||||
return true
|
||||
}
|
||||
|
||||
imageName := IDOrName
|
||||
repo, name, tag := parseImageName(imageName)
|
||||
if matchTag {
|
||||
if tag == "" {
|
||||
imageName = toImageName(repo, name, "latest")
|
||||
}
|
||||
} else {
|
||||
imageName = toImageName(repo, name, "")
|
||||
}
|
||||
repoName, tag := parsers.ParseRepositoryTag(IDOrName)
|
||||
|
||||
for _, repoTag := range image.RepoTags {
|
||||
if matchTag == false {
|
||||
r, n, _ := parseImageName(repoTag)
|
||||
repoTag = toImageName(r, n, "")
|
||||
for _, imageRepoTag := range image.RepoTags {
|
||||
imageRepoName, imageTag := parsers.ParseRepositoryTag(imageRepoTag)
|
||||
|
||||
if matchTag == false && imageRepoName == repoName {
|
||||
return true
|
||||
}
|
||||
if repoTag == imageName {
|
||||
if imageRepoName == repoName && (imageTag == tag || tag == "") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,35 +33,6 @@ func TestMatch(t *testing.T) {
|
||||
assert.False(t, img.Match("na", false))
|
||||
}
|
||||
|
||||
func TestParseImage(t *testing.T) {
|
||||
repo, name, tag := parseImageName("private.registry.com:5000/name:latest")
|
||||
assert.Equal(t, repo, "private.registry.com:5000")
|
||||
assert.Equal(t, name, "name")
|
||||
assert.Equal(t, tag, "latest")
|
||||
|
||||
repo, name, tag = parseImageName("name:latest")
|
||||
assert.Equal(t, repo, "")
|
||||
assert.Equal(t, name, "name")
|
||||
assert.Equal(t, tag, "latest")
|
||||
|
||||
repo, name, tag = parseImageName("name")
|
||||
assert.Equal(t, repo, "")
|
||||
assert.Equal(t, name, "name")
|
||||
assert.Equal(t, tag, "")
|
||||
|
||||
repo, name, tag = parseImageName("")
|
||||
assert.Equal(t, repo, "")
|
||||
assert.Equal(t, name, "")
|
||||
assert.Equal(t, tag, "")
|
||||
}
|
||||
|
||||
func TestToImage(t *testing.T) {
|
||||
assert.Equal(t, toImageName("", "name", ""), "name")
|
||||
assert.Equal(t, toImageName("", "name", "latest"), "name:latest")
|
||||
assert.Equal(t, toImageName("a", "name", ""), "a/name")
|
||||
assert.Equal(t, toImageName("private.registry.com:5000", "name", "latest"), "private.registry.com:5000/name:latest")
|
||||
}
|
||||
|
||||
func TestMatchPrivateRepo(t *testing.T) {
|
||||
img := Image{}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user