Browse Source

strip scheme from name

Michael Yang 1 year ago
parent
commit
88775e1ff9
2 changed files with 27 additions and 3 deletions
  1. 7 1
      types/model/name.go
  2. 20 2
      types/model/name_test.go

+ 7 - 1
types/model/name.go

@@ -153,12 +153,18 @@ func ParseNameBare(s string) Name {
 		n.Model = s
 		return n
 	}
+
 	s, n.Namespace, promised = cutPromised(s, "/")
 	if !promised {
 		n.Namespace = s
 		return n
 	}
-	n.Host = s
+
+	scheme, host, ok := strings.Cut(s, "://")
+	if ! ok {
+		host = scheme
+	}
+	n.Host = host
 
 	return n
 }

+ 20 - 2
types/model/name_test.go

@@ -17,6 +17,15 @@ func TestParseNameParts(t *testing.T) {
 		want            Name
 		wantValidDigest bool
 	}{
+		{
+			in: "scheme://host:port/namespace/model:tag",
+			want: Name{
+				Host:      "host:port",
+				Namespace: "namespace",
+				Model:     "model",
+				Tag:       "tag",
+			},
+		},
 		{
 			in: "host/namespace/model:tag",
 			want: Name{
@@ -26,6 +35,15 @@ func TestParseNameParts(t *testing.T) {
 				Tag:       "tag",
 			},
 		},
+		{
+			in: "host:port/namespace/model:tag",
+			want: Name{
+				Host:      "host:port",
+				Namespace: "namespace",
+				Model:     "model",
+				Tag:       "tag",
+			},
+		},
 		{
 			in: "host/namespace/model",
 			want: Name{
@@ -35,9 +53,9 @@ func TestParseNameParts(t *testing.T) {
 			},
 		},
 		{
-			in: "host:12345/namespace/model",
+			in: "host:port/namespace/model",
 			want: Name{
-				Host:      "host:12345",
+				Host:      "host:port",
 				Namespace: "namespace",
 				Model:     "model",
 			},