diff --git a/src/main/java/land/oras/LayoutRef.java b/src/main/java/land/oras/LayoutRef.java index 0c8c8b8b..d8536920 100644 --- a/src/main/java/land/oras/LayoutRef.java +++ b/src/main/java/land/oras/LayoutRef.java @@ -84,6 +84,24 @@ public static LayoutRef parse(String name) { return new LayoutRef(path, tag); } + /** + * Return a new layout reference for a path + * @param path The path + * @return The layout ref + */ + public LayoutRef forPath(Path path) { + return new LayoutRef(path, tag); + } + + /** + * Return a new layout reference for a path + * @param ociLayout The OCI layout + * @return The layout ref + */ + public LayoutRef forLayout(OCILayout ociLayout) { + return forPath(ociLayout.getPath()); + } + @Override public SupportedAlgorithm getAlgorithm() { // Default if not set diff --git a/src/main/java/land/oras/OCI.java b/src/main/java/land/oras/OCI.java index 32435c22..69cecb61 100644 --- a/src/main/java/land/oras/OCI.java +++ b/src/main/java/land/oras/OCI.java @@ -404,7 +404,7 @@ public Manifest attachArtifact(T ref, ArtifactType artifactType, Annotations ann .withSubject(subject); return pushManifest( ref.withDigest( - SupportedAlgorithm.SHA256.digest(manifest.toJson().getBytes(StandardCharsets.UTF_8))), + SupportedAlgorithm.getDefault().digest(manifest.toJson().getBytes(StandardCharsets.UTF_8))), manifest); } } diff --git a/src/test/java/land/oras/LayoutRefTest.java b/src/test/java/land/oras/LayoutRefTest.java index e646be06..28045e8f 100644 --- a/src/test/java/land/oras/LayoutRefTest.java +++ b/src/test/java/land/oras/LayoutRefTest.java @@ -35,6 +35,12 @@ public class LayoutRefTest { @TempDir public static Path tempDir; + @TempDir + public static Path ociLayoutTempDir; + + @TempDir + public static Path otherOciLayout; + @Test void shouldParseLayoutWithAllParts() { String ociLayout = tempDir.resolve("foo").toString(); @@ -62,6 +68,14 @@ void shouldParseFolderNameOnly() { assertEquals("foo", layoutRef.getFolder().toString()); } + @Test + void shouldReturnForOciLayout() { + OCILayout ociLayout = OCILayout.builder().defaults(ociLayoutTempDir).build(); + LayoutRef layoutRef = + LayoutRef.parse(otherOciLayout.getFileName().toString()).forLayout(ociLayout); + assertEquals(layoutRef.getFolder(), ociLayoutTempDir, "Path should be the same"); + } + @Test void shouldFailWithInvalidRef() { assertThrows(OrasException.class, () -> LayoutRef.parse(""));