tree 3e57a255980bdb6488cae8c8f66a50f8ea39c1c0
parent bc4cbbe7dc15e8aa7af43f2e9213e1044bcdf556
author Søren Gjesse <sgjesse@google.com> 1699016127 +0100
committer Søren Gjesse <sgjesse@google.com> 1699016755 +0000

Update the spdx-gradle-plugin to latest HEAD with patch

The spdx-gradle-plugin is built from https://github.com/spdx/spdx-gradle-plugin
at e935c0c26e09de34977be794435f63b6382c3d33 with the following patch:

diff --git a/gradle.properties b/gradle.properties
index b31ef9a..f24f400 100644

--- a/gradle.properties
+++ b/gradle.properties
@@ -1 +1 @@
-version=0.4.0
+version=0.4.0-r8-patch01
diff --git a/src/main/java/org/spdx/sbom/gradle/utils/SpdxDocumentBuilder.java b/src/main/java/org/spdx/sbom/gradle/utils/SpdxDocumentBuilder.java
index de3214a..af25bf2 100644
--- a/src/main/java/org/spdx/sbom/gradle/utils/SpdxDocumentBuilder.java
+++ b/src/main/java/org/spdx/sbom/gradle/utils/SpdxDocumentBuilder.java
@@ -168,9 +168,56 @@ public class SpdxDocumentBuilder {
                     (file1, file2) -> {
                       if (Objects.equals(file1, file2)) {
                         return file1;
-                      } else
+                      } else {
+                        // In the current R8 build setup we get the following file pairs
+                        // (as of 8c88aa02f7804f5a37ca6aea38cfc7f76c806360);
+                        //
+                        // d8_r8/keepanno/build/classes/java/main
+                        // d8_r8/keepanno/build/classes/kotlin/main
+                        //
+                        // d8_r8/resourceshrinker/build/classes/kotlin/main
+                        // d8_r8/resourceshrinker/build/classes/java/main
+                        //
+                        // d8_r8/keepanno/build/classes/java/main
+                        // d8_r8/keepanno/build/classes/kotlin/main
+                        //
+                        // d8_r8/keepanno/build/classes/java/main
+                        // d8_r8/keepanno/build/libs/keepanno.jar
+                        //
+                        // d8_r8/resourceshrinker/build/classes/java/main
+                        // d8_r8/resourceshrinker/build/libs/resourceshrinker.jar
+                        //
+                        // For now workaround the duplicated by preferring file to directory and
+                        // java directory to kotlin directory when both are directories.
+                        if (!file1.exists()) {
+                          return file2;
+                        }
+                        if (!file2.exists()) {
+                          return file1;
+                        }
+                        if (file1.isFile() && file2.isDirectory()) {
+                          return file1;
+                        }
+                        if (file1.isDirectory() && file2.isFile()) {
+                          return file2;
+                        }
+                        if (file1.isDirectory() && file2.isDirectory()) {
+                          if (file1.getName().equals(file2.getName())) {
+                            String parent1 = file1.getParent();
+                            String parent2 = file2.getParent();
+                            if (parent1.endsWith("classes/java") && parent2.endsWith(
+                                "classes/kotlin")) {
+                              return file1;
+                            }
+                            if (parent2.endsWith("classes/java") && parent1.endsWith(
+                                "classes/kotlin")) {
+                              return file2;
+                            }
+                          }
+                        }
                         throw new IllegalStateException(
                             "cannot merge duplicate " + file1 + " and " + file2);
+                      }
                     }));
     this.mavenArtifactRepositories = mavenArtifactRepositories;
     this.poms = poms;

Built with

  ./gradlew -Pskip.signing -Dmaven.repo.local=/tmp/spdx-gradle-plugin publishToMavenLocal

Added to dependencies with:

  tools/create_local_maven_with_dependencies.py \
    --no-upload \
    --studio <studio-path> \
    --plugin-deps \
    --include-maven-local /tmp/spdx-gradle-plugin

Fixes: b/309083377
Change-Id: I66e33c1e49e113fb4ae9121876f33d6e10eefdb9
