types/model: export ParseNameBare and Merge (#3957)
These are useful outside this package.
This commit is contained in:
parent
11d83386a5
commit
b1390a7b37
2 changed files with 10 additions and 9 deletions
|
@ -132,11 +132,12 @@ type Name struct {
|
||||||
// field values are left in an undefined state. Use [Name.IsValid] to check
|
// field values are left in an undefined state. Use [Name.IsValid] to check
|
||||||
// if the name is valid.
|
// if the name is valid.
|
||||||
func ParseName(s string) Name {
|
func ParseName(s string) Name {
|
||||||
return merge(parseName(s), DefaultName())
|
return Merge(ParseNameBare(s), DefaultName())
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseName is the same as [ParseName] without a merge.
|
// ParseNameBare parses s as a name string and returns a Name. No merge with
|
||||||
func parseName(s string) Name {
|
// [DefaultName] is performed.
|
||||||
|
func ParseNameBare(s string) Name {
|
||||||
var n Name
|
var n Name
|
||||||
var promised bool
|
var promised bool
|
||||||
|
|
||||||
|
@ -161,9 +162,9 @@ func parseName(s string) Name {
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
// merge merges the host, namespace, and tag parts of the two names,
|
// Merge merges the host, namespace, and tag parts of the two names,
|
||||||
// preferring the non-empty parts of a.
|
// preferring the non-empty parts of a.
|
||||||
func merge(a, b Name) Name {
|
func Merge(a, b Name) Name {
|
||||||
a.Host = cmp.Or(a.Host, b.Host)
|
a.Host = cmp.Or(a.Host, b.Host)
|
||||||
a.Namespace = cmp.Or(a.Namespace, b.Namespace)
|
a.Namespace = cmp.Or(a.Namespace, b.Namespace)
|
||||||
a.Tag = cmp.Or(a.Tag, b.Tag)
|
a.Tag = cmp.Or(a.Tag, b.Tag)
|
||||||
|
|
|
@ -93,7 +93,7 @@ func TestParseNameParts(t *testing.T) {
|
||||||
|
|
||||||
for _, tt := range cases {
|
for _, tt := range cases {
|
||||||
t.Run(tt.in, func(t *testing.T) {
|
t.Run(tt.in, func(t *testing.T) {
|
||||||
got := parseName(tt.in)
|
got := ParseNameBare(tt.in)
|
||||||
if !reflect.DeepEqual(got, tt.want) {
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
t.Errorf("parseName(%q) = %v; want %v", tt.in, got, tt.want)
|
t.Errorf("parseName(%q) = %v; want %v", tt.in, got, tt.want)
|
||||||
}
|
}
|
||||||
|
@ -166,7 +166,7 @@ func TestNameparseNameDefault(t *testing.T) {
|
||||||
func TestNameIsValid(t *testing.T) {
|
func TestNameIsValid(t *testing.T) {
|
||||||
var numStringTests int
|
var numStringTests int
|
||||||
for s, want := range testCases {
|
for s, want := range testCases {
|
||||||
n := parseName(s)
|
n := ParseNameBare(s)
|
||||||
t.Logf("n: %#v", n)
|
t.Logf("n: %#v", n)
|
||||||
got := n.IsValid()
|
got := n.IsValid()
|
||||||
if got != want {
|
if got != want {
|
||||||
|
@ -175,7 +175,7 @@ func TestNameIsValid(t *testing.T) {
|
||||||
|
|
||||||
// Test roundtrip with String
|
// Test roundtrip with String
|
||||||
if got {
|
if got {
|
||||||
got := parseName(s).String()
|
got := ParseNameBare(s).String()
|
||||||
if got != s {
|
if got != s {
|
||||||
t.Errorf("parseName(%q).String() = %q; want %q", s, got, s)
|
t.Errorf("parseName(%q).String() = %q; want %q", s, got, s)
|
||||||
}
|
}
|
||||||
|
@ -221,7 +221,7 @@ func FuzzName(f *testing.F) {
|
||||||
f.Add(s)
|
f.Add(s)
|
||||||
}
|
}
|
||||||
f.Fuzz(func(t *testing.T, s string) {
|
f.Fuzz(func(t *testing.T, s string) {
|
||||||
n := parseName(s)
|
n := ParseNameBare(s)
|
||||||
if n.IsValid() {
|
if n.IsValid() {
|
||||||
parts := [...]string{n.Host, n.Namespace, n.Model, n.Tag, n.RawDigest}
|
parts := [...]string{n.Host, n.Namespace, n.Model, n.Tag, n.RawDigest}
|
||||||
for _, part := range parts {
|
for _, part := range parts {
|
||||||
|
|
Loading…
Reference in a new issue