浏览代码

extract method to reduce cyclomatic complexity

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 2 年之前
父节点
当前提交
599e4b242a
共有 1 个文件被更改,包括 36 次插入29 次删除
  1. 36 29
      pkg/remote/oci.go

+ 36 - 29
pkg/remote/oci.go

@@ -108,50 +108,57 @@ func (g ociRemoteLoader) Load(ctx context.Context, path string) (string, error)
 	local := filepath.Join(g.cache, descriptor.Digest.Hex())
 	local := filepath.Join(g.cache, descriptor.Digest.Hex())
 	composeFile := filepath.Join(local, "compose.yaml")
 	composeFile := filepath.Join(local, "compose.yaml")
 	if _, err = os.Stat(local); os.IsNotExist(err) {
 	if _, err = os.Stat(local); os.IsNotExist(err) {
-
-		err = os.MkdirAll(local, 0o700)
+		var manifest v1.Manifest
+		err = json.Unmarshal(content, &manifest)
 		if err != nil {
 		if err != nil {
 			return "", err
 			return "", err
 		}
 		}
 
 
-		f, err := os.Create(composeFile)
-		if err != nil {
-			return "", err
+		s, err2 := g.pullComposeFiles(ctx, local, composeFile, manifest, ref, resolver)
+		if err2 != nil {
+			return s, err2
 		}
 		}
-		defer f.Close() //nolint:errcheck
+	}
+	return composeFile, nil
+}
 
 
-		var manifest v1.Manifest
-		err = json.Unmarshal(content, &manifest)
+func (g ociRemoteLoader) pullComposeFiles(ctx context.Context, local string, composeFile string, manifest v1.Manifest, ref reference.Named, resolver *imagetools.Resolver) (string, error) {
+	err := os.MkdirAll(local, 0o700)
+	if err != nil {
+		return "", err
+	}
+
+	f, err := os.Create(composeFile)
+	if err != nil {
+		return "", err
+	}
+	defer f.Close() //nolint:errcheck
+
+	if manifest.ArtifactType != "application/vnd.docker.compose.project" {
+		return "", fmt.Errorf("%s is not a compose project OCI artifact, but %s", ref.String(), manifest.ArtifactType)
+	}
+
+	for i, layer := range manifest.Layers {
+		digested, err := reference.WithDigest(ref, layer.Digest)
 		if err != nil {
 		if err != nil {
 			return "", err
 			return "", err
 		}
 		}
-
-		if manifest.ArtifactType != "application/vnd.docker.compose.project" {
-			return "", fmt.Errorf("%s is not a compose project OCI artifact, but %s", ref.String(), manifest.ArtifactType)
+		content, _, err := resolver.Get(ctx, digested.String())
+		if err != nil {
+			return "", err
 		}
 		}
-
-		for i, layer := range manifest.Layers {
-			digested, err := reference.WithDigest(ref, layer.Digest)
-			if err != nil {
-				return "", err
-			}
-			content, _, err := resolver.Get(ctx, digested.String())
-			if err != nil {
-				return "", err
-			}
-			if i > 0 {
-				_, err = f.Write([]byte("\n---\n"))
-				if err != nil {
-					return "", err
-				}
-			}
-			_, err = f.Write(content)
+		if i > 0 {
+			_, err = f.Write([]byte("\n---\n"))
 			if err != nil {
 			if err != nil {
 				return "", err
 				return "", err
 			}
 			}
 		}
 		}
+		_, err = f.Write(content)
+		if err != nil {
+			return "", err
+		}
 	}
 	}
-	return composeFile, nil
+	return "", nil
 }
 }
 
 
 var _ loader.ResourceLoader = ociRemoteLoader{}
 var _ loader.ResourceLoader = ociRemoteLoader{}