Merge pull request #17924 from aaronlehmann/content-addressability
Content addressability
This commit is contained in:
commit
5ca1b7ff65
3 changed files with 4 additions and 50 deletions
|
@ -110,26 +110,6 @@ func ParseTCPAddr(tryAddr string, defaultAddr string) (string, error) {
|
||||||
return fmt.Sprintf("tcp://%s%s", net.JoinHostPort(host, port), u.Path), nil
|
return fmt.Sprintf("tcp://%s%s", net.JoinHostPort(host, port), u.Path), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseRepositoryTag gets a repos name and returns the right reposName + tag|digest
|
|
||||||
// The tag can be confusing because of a port in a repository name.
|
|
||||||
// Ex: localhost.localdomain:5000/samalba/hipache:latest
|
|
||||||
// Digest ex: localhost:5000/foo/bar@sha256:bc8813ea7b3603864987522f02a76101c17ad122e1c46d790efc0fca78ca7bfb
|
|
||||||
func ParseRepositoryTag(repos string) (string, string) {
|
|
||||||
n := strings.Index(repos, "@")
|
|
||||||
if n >= 0 {
|
|
||||||
parts := strings.Split(repos, "@")
|
|
||||||
return parts[0], parts[1]
|
|
||||||
}
|
|
||||||
n = strings.LastIndex(repos, ":")
|
|
||||||
if n < 0 {
|
|
||||||
return repos, ""
|
|
||||||
}
|
|
||||||
if tag := repos[n+1:]; !strings.Contains(tag, "/") {
|
|
||||||
return repos[:n], tag
|
|
||||||
}
|
|
||||||
return repos, ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// PartParser parses and validates the specified string (data) using the specified template
|
// PartParser parses and validates the specified string (data) using the specified template
|
||||||
// e.g. ip:public:private -> 192.168.0.1:80:8000
|
// e.g. ip:public:private -> 192.168.0.1:80:8000
|
||||||
func PartParser(template, data string) (map[string]string, error) {
|
func PartParser(template, data string) (map[string]string, error) {
|
||||||
|
|
|
@ -120,36 +120,6 @@ func TestParseInvalidUnixAddrInvalid(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseRepositoryTag(t *testing.T) {
|
|
||||||
if repo, tag := ParseRepositoryTag("root"); repo != "root" || tag != "" {
|
|
||||||
t.Errorf("Expected repo: '%s' and tag: '%s', got '%s' and '%s'", "root", "", repo, tag)
|
|
||||||
}
|
|
||||||
if repo, tag := ParseRepositoryTag("root:tag"); repo != "root" || tag != "tag" {
|
|
||||||
t.Errorf("Expected repo: '%s' and tag: '%s', got '%s' and '%s'", "root", "tag", repo, tag)
|
|
||||||
}
|
|
||||||
if repo, digest := ParseRepositoryTag("root@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); repo != "root" || digest != "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" {
|
|
||||||
t.Errorf("Expected repo: '%s' and digest: '%s', got '%s' and '%s'", "root", "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", repo, digest)
|
|
||||||
}
|
|
||||||
if repo, tag := ParseRepositoryTag("user/repo"); repo != "user/repo" || tag != "" {
|
|
||||||
t.Errorf("Expected repo: '%s' and tag: '%s', got '%s' and '%s'", "user/repo", "", repo, tag)
|
|
||||||
}
|
|
||||||
if repo, tag := ParseRepositoryTag("user/repo:tag"); repo != "user/repo" || tag != "tag" {
|
|
||||||
t.Errorf("Expected repo: '%s' and tag: '%s', got '%s' and '%s'", "user/repo", "tag", repo, tag)
|
|
||||||
}
|
|
||||||
if repo, digest := ParseRepositoryTag("user/repo@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); repo != "user/repo" || digest != "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" {
|
|
||||||
t.Errorf("Expected repo: '%s' and digest: '%s', got '%s' and '%s'", "user/repo", "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", repo, digest)
|
|
||||||
}
|
|
||||||
if repo, tag := ParseRepositoryTag("url:5000/repo"); repo != "url:5000/repo" || tag != "" {
|
|
||||||
t.Errorf("Expected repo: '%s' and tag: '%s', got '%s' and '%s'", "url:5000/repo", "", repo, tag)
|
|
||||||
}
|
|
||||||
if repo, tag := ParseRepositoryTag("url:5000/repo:tag"); repo != "url:5000/repo" || tag != "tag" {
|
|
||||||
t.Errorf("Expected repo: '%s' and tag: '%s', got '%s' and '%s'", "url:5000/repo", "tag", repo, tag)
|
|
||||||
}
|
|
||||||
if repo, digest := ParseRepositoryTag("url:5000/repo@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); repo != "url:5000/repo" || digest != "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" {
|
|
||||||
t.Errorf("Expected repo: '%s' and digest: '%s', got '%s' and '%s'", "url:5000/repo", "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", repo, digest)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestParseKeyValueOpt(t *testing.T) {
|
func TestParseKeyValueOpt(t *testing.T) {
|
||||||
invalids := map[string]string{
|
invalids := map[string]string{
|
||||||
"": "Unable to parse key/value option: ",
|
"": "Unable to parse key/value option: ",
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/random"
|
"github.com/docker/docker/pkg/random"
|
||||||
)
|
)
|
||||||
|
@ -25,6 +26,9 @@ func IsShortID(id string) bool {
|
||||||
// In case of a collision a lookup with TruncIndex.Get() will fail, and the caller
|
// In case of a collision a lookup with TruncIndex.Get() will fail, and the caller
|
||||||
// will need to use a langer prefix, or the full-length Id.
|
// will need to use a langer prefix, or the full-length Id.
|
||||||
func TruncateID(id string) string {
|
func TruncateID(id string) string {
|
||||||
|
if i := strings.IndexRune(id, ':'); i >= 0 {
|
||||||
|
id = id[i+1:]
|
||||||
|
}
|
||||||
trimTo := shortLen
|
trimTo := shortLen
|
||||||
if len(id) < shortLen {
|
if len(id) < shortLen {
|
||||||
trimTo = len(id)
|
trimTo = len(id)
|
||||||
|
|
Loading…
Reference in a new issue