From 6984e9eef1947b27406ee65b8c4096108c9ead03 Mon Sep 17 00:00:00 2001 From: Pranav Gaikwad Date: Wed, 15 Jan 2025 13:32:01 -0500 Subject: [PATCH] :bug: make sure non java files are exploded to java project (#760) --------- Signed-off-by: Pranav Gaikwad Signed-off-by: Cherry Picker --- demo-output.yaml | 56 +++++++++++++++++++ .../pkg/java_external_provider/util.go | 24 +++++++- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/demo-output.yaml b/demo-output.yaml index 44184ab5..5eb7ec6d 100644 --- a/demo-output.yaml +++ b/demo-output.yaml @@ -209,6 +209,30 @@ data: dependency innerText: "\n io.javaoperatorsdk.operator\n sample\n 0.0.0\n " matchingXML: io.javaoperatorsdk.operatorsample0.0.0 + - uri: file:///examples/java-project/quarkus-1-6-2-jar-exploded/META-INF/maven/io.javaoperatorsdk/quarkus/pom.xml + message: io.javaoperatorsdkoperator-framework-quarkus-extension${project.version} + codeSnip: "30 ${quarkus.version}\n31 pom\n32 import\n33 \n34 \n35 \n36 \n37 \n38 \n39 io.javaoperatorsdk\n40 operator-framework-quarkus-extension\n41 ${project.version}\n42 \n43 \n44 io.javaoperatorsdk\n45 operator-framework-samples-common\n46 ${project.version}\n47 \n48 \n49 \n50 " + lineNumber: 39 + variables: + data: dependency + innerText: "\n io.javaoperatorsdk\n operator-framework-quarkus-extension\n ${project.version}\n " + matchingXML: io.javaoperatorsdkoperator-framework-quarkus-extension${project.version} + - uri: file:///examples/java-project/quarkus-1-6-2-jar-exploded/META-INF/maven/io.javaoperatorsdk/quarkus/pom.xml + message: io.javaoperatorsdkoperator-framework-samples-common${project.version} + codeSnip: "35 \n36 \n37 \n38 \n39 io.javaoperatorsdk\n40 operator-framework-quarkus-extension\n41 ${project.version}\n42 \n43 \n44 io.javaoperatorsdk\n45 operator-framework-samples-common\n46 ${project.version}\n47 \n48 \n49 \n50 \n51 \n52 \n53 org.apache.maven.plugins\n54 maven-compiler-plugin\n55 ${compiler-plugin.version}" + lineNumber: 44 + variables: + data: dependency + innerText: "\n io.javaoperatorsdk\n operator-framework-samples-common\n ${project.version}\n " + matchingXML: io.javaoperatorsdkoperator-framework-samples-common${project.version} + - uri: file:///examples/java-project/quarkus-1-6-2-jar-exploded/META-INF/maven/io.javaoperatorsdk/quarkus/pom.xml + message: io.quarkusquarkus-universe-bom${quarkus.version}pomimport + codeSnip: "19 11\n20 1.10.5.Final\n21 3.8.1\n22 true\n23 \n24 \n25 \n26 \n27 \n28 io.quarkus\n29 quarkus-universe-bom\n30 ${quarkus.version}\n31 pom\n32 import\n33 \n34 \n35 \n36 \n37 \n38 \n39 io.javaoperatorsdk" + lineNumber: 28 + variables: + data: dependency + innerText: "\n io.quarkus\n quarkus-universe-bom\n ${quarkus.version}\n pom\n import\n " + matchingXML: io.quarkusquarkus-universe-bom${quarkus.version}pomimport - uri: file:///examples/java/dummy/pom.xml message: |- javaxjavaee-api" diff --git a/external-providers/java-external-provider/pkg/java_external_provider/util.go b/external-providers/java-external-provider/pkg/java_external_provider/util.go index 30fdb55e..70b97d6f 100644 --- a/external-providers/java-external-provider/pkg/java_external_provider/util.go +++ b/external-providers/java-external-provider/pkg/java_external_provider/util.go @@ -14,6 +14,7 @@ import ( "os" "os/exec" "path/filepath" + "regexp" "strings" "sync" "text/template" @@ -247,7 +248,10 @@ func explode(ctx context.Context, log logr.Logger, archivePath, projectPath stri if f.FileInfo().IsDir() { // make sure execute bits are set so that fernflower can decompile - os.MkdirAll(filePath, f.Mode()|0111) + err := os.MkdirAll(filePath, f.Mode()|0111) + if err != nil { + log.V(5).Error(err, "failed to create directory when exploding the archive", "filePath", filePath) + } continue } @@ -391,6 +395,22 @@ func explode(ctx context.Context, log logr.Logger, archivePath, projectPath stri }) } } + // any other files, move to java project as-is + default: + baseName := strings.ToValidUTF8(f.Name, "_") + re := regexp.MustCompile(`[^\w\-\.\\/]+`) + baseName = re.ReplaceAllString(baseName, "_") + destPath := filepath.Join( + projectPath, strings.Replace(filepath.Base(archivePath), ".", "-", -1)+"-exploded", baseName) + if err := os.MkdirAll(filepath.Dir(destPath), 0755); err != nil { + log.V(8).Error(err, "error creating directory for java file", "path", destPath) + continue + } + if err := moveFile(filePath, destPath); err != nil { + log.V(8).Error(err, "error moving decompiled file to project path", + "src", filePath, "dest", destPath) + continue + } } } @@ -606,4 +626,4 @@ func toFilePathDependency(_ context.Context, filePath string) (javaArtifact, err dep.Version = "0.0.0" return dep, nil -} +} \ No newline at end of file