types/model: relax name length constraint from 2 to 1 (#3984)

This commit is contained in:
Blake Mizerany 2024-04-27 17:58:41 -07:00 committed by GitHub
parent 8fd9e56804
commit c631a9c726
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 11 deletions

View file

@ -113,16 +113,16 @@ type Name struct {
// length: [1, 350] // length: [1, 350]
// namespace: // namespace:
// pattern: alphanum { alphanum | "-" | "_" }* // pattern: alphanum { alphanum | "-" | "_" }*
// length: [2, 80] // length: [1, 80]
// model: // model:
// pattern: alphanum { alphanum | "-" | "_" | "." }* // pattern: alphanum { alphanum | "-" | "_" | "." }*
// length: [2, 80] // length: [1, 80]
// tag: // tag:
// pattern: alphanum { alphanum | "-" | "_" | "." }* // pattern: alphanum { alphanum | "-" | "_" | "." }*
// length: [1, 80] // length: [1, 80]
// digest: // digest:
// pattern: alphanum { alphanum | "-" | ":" }* // pattern: alphanum { alphanum | "-" | ":" }*
// length: [2, 80] // length: [1, 80]
// //
// Most users should use [ParseName] instead, unless need to support // Most users should use [ParseName] instead, unless need to support
// different defaults than DefaultName. // different defaults than DefaultName.
@ -254,7 +254,7 @@ func isValidLen(kind partKind, s string) bool {
case kindTag: case kindTag:
return len(s) >= 1 && len(s) <= 80 return len(s) >= 1 && len(s) <= 80
default: default:
return len(s) >= 2 && len(s) <= 80 return len(s) >= 1 && len(s) <= 80
} }
} }

View file

@ -101,6 +101,11 @@ func TestParseNameParts(t *testing.T) {
} }
var testCases = map[string]bool{ // name -> valid var testCases = map[string]bool{ // name -> valid
"": false,
// minimal
"h/n/m:t@d": true,
"host/namespace/model:tag": true, "host/namespace/model:tag": true,
"host/namespace/model": false, "host/namespace/model": false,
"namespace/model": false, "namespace/model": false,
@ -116,11 +121,12 @@ var testCases = map[string]bool{ // name -> valid
"h/nn/mm:t@sha256-1000000000000000000000000000000000000000000000000000000000000000": true, // bare minimum part sizes "h/nn/mm:t@sha256-1000000000000000000000000000000000000000000000000000000000000000": true, // bare minimum part sizes
"h/nn/mm:t@sha256:1000000000000000000000000000000000000000000000000000000000000000": true, // bare minimum part sizes "h/nn/mm:t@sha256:1000000000000000000000000000000000000000000000000000000000000000": true, // bare minimum part sizes
"m": false, // model too short // unqualified
"n/mm:": false, // namespace too short "m": false,
"h/n/mm:t": false, // namespace too short "n/m:": false,
"@t": false, // digest too short "h/n/m": false,
"mm@d": false, // digest too short "@t": false,
"m@d": false,
// invalids // invalids
"^": false, "^": false,
@ -140,8 +146,6 @@ var testCases = map[string]bool{ // name -> valid
"hh/nn/mm:-tt@dd": false, "hh/nn/mm:-tt@dd": false,
"hh/nn/mm:tt@-dd": false, "hh/nn/mm:tt@-dd": false,
"": false,
// hosts // hosts
"host:https/namespace/model:tag": true, "host:https/namespace/model:tag": true,