Explorar o código

more resilient Manifests

Michael Yang hai 11 meses
pai
achega
81fb06f530
Modificáronse 2 ficheiros con 18 adicións e 3 borrados
  1. 14 3
      server/manifest.go
  2. 4 0
      server/manifest_test.go

+ 14 - 3
server/manifest.go

@@ -125,13 +125,24 @@ func Manifests() (map[model.Name]*Manifest, error) {
 
 	ms := make(map[model.Name]*Manifest)
 	for _, match := range matches {
-		rel, err := filepath.Rel(manifests, match)
+		fi, err := os.Stat(match)
 		if err != nil {
 			return nil, err
 		}
 
-		n := model.ParseNameFromFilepath(rel)
-		if n.IsValid() {
+		if !fi.IsDir() {
+			rel, err := filepath.Rel(manifests, match)
+			if err != nil {
+				slog.Warn("bad filepath", "path", match, "error", err)
+				continue
+			}
+
+			n := model.ParseNameFromFilepath(rel)
+			if !n.IsValid() {
+				slog.Warn("bad manifest name", "path", rel, "error", err)
+				continue
+			}
+
 			m, err := ParseNamedManifest(n)
 			if err != nil {
 				slog.Warn("bad manifest", "name", n, "error", err)

+ 4 - 0
server/manifest_test.go

@@ -56,6 +56,10 @@ func TestManifests(t *testing.T) {
 			filepath.Join("host", "namespace", "model", "tag"),
 			filepath.Join("host", "namespace", "model", ".hidden"),
 		},
+		"subdir": {
+			filepath.Join("host", "namespace", "model", "tag", "one"),
+			filepath.Join("host", "namespace", "model", "tag", "another", "one"),
+		},
 	}
 
 	for n, wants := range cases {