1
0
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:
Daniel Nephin
2015-10-15 12:21:54 -04:00
parent f69f0e41d4
commit 910fec887d
3 changed files with 10 additions and 73 deletions

2
Godeps/Godeps.json generated
View File

@@ -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"
},

View File

@@ -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
}
}

View File

@@ -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{}