commit:     eceb93b00b8a1b4c8841f43bf61347fbb613f249
Author:     zongyu <zzy2529420793 <AT> gmail <DOT> com>
AuthorDate: Mon Jun 29 08:22:46 2020 +0000
Commit:     Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
CommitDate: Mon Jul  6 09:48:27 2020 +0000
URL:        https://gitweb.gentoo.org/proj/java-ebuilder.git/commit/?id=eceb93b0

enable java-ebuilder to read metadata of a Gentoo package, and get a proper SLOT

Signed-off-by: zongyu <zzy2529420793 <AT> gmail.com>

 .../java/ebuilder/portage/PortageParser.java       | 44 +++++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java 
b/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
index fd9e2c4..96e0c06 100644
--- a/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
+++ b/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
@@ -8,6 +8,7 @@ import java.io.OutputStreamWriter;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -251,6 +252,8 @@ public class PortageParser {
         final String pkg = ebuild.getParentFile().getName();
         final String version = filename.substring(pkg.length() + 1);
         final Map<String, String> variables = new HashMap<>(20);
+        final Path ebuildMetadata = Paths.get(ebuild.getParent(), "..", "..",
+                "metadata", "md5-cache", category, filename).normalize();
         List<String> eclasses = null;
         String slot = "0";
         String useFlag = null;
@@ -328,7 +331,12 @@ public class PortageParser {
             pv = version.substring(0, pos);
         }
 
-        slot = processSlot(slot, pv, variables);
+        if (Files.exists(ebuildMetadata)) {
+            slot = processSlot(slot, ebuildMetadata);
+        }
+        else {
+            slot = processSlot(slot, pv, variables);
+        }
 
         if (mavenId != null) {
             mavenId = mavenId.replaceAll("\\$(\\{PN\\}|PN)", pkg).
@@ -388,6 +396,40 @@ public class PortageParser {
         }
     }
 
+    /**
+     * Processes various instructions in SLOT string.
+     *
+     * @param slot           SLOT string
+     * @param ebuildMetadata path to the metadata of the Gentoo package
+     *
+     * @return processed SLOT string
+     */
+    private String processSlot(final String slot,
+            final Path ebuildMetadata) {
+        //final metadata = new File(ebuildMetadata.toString());
+       String result = slot;
+        try (final BufferedReader reader = new BufferedReader(
+                new InputStreamReader(Files.newInputStream(ebuildMetadata,
+                        StandardOpenOption.READ)))) {
+            String line = reader.readLine();
+            while (line != null) {
+                line = line.trim();
+
+                if (!line.isEmpty()) {
+                    if (line.startsWith("SLOT=")) {
+                        result = line.substring("SLOT=".length()).replace(
+                                "\"", "").replaceAll("/.*", "");
+                    }
+
+                line = reader.readLine();
+                }
+            }
+        } catch (final IOException ex) {
+            throw new RuntimeException("Failed to read ebuild", ex);
+        }
+       return result;
+    }
+
     /**
      * Processes various instructions in SLOT string.
      *

Reply via email to