Browse Source

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

Blake Mizerany 1 year ago
parent
commit
c631a9c726
2 changed files with 15 additions and 11 deletions
  1. 4 4
      types/model/name.go
  2. 11 7
      types/model/name_test.go

+ 4 - 4
types/model/name.go

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

+ 11 - 7
types/model/name_test.go

@@ -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
-	"n/mm:":    false, // namespace too short
-	"h/n/mm:t": false, // namespace too short
-	"@t":       false, // digest too short
-	"mm@d":     false, // digest too short
+	// unqualified
+	"m":     false,
+	"n/m:":  false,
+	"h/n/m": false,
+	"@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,