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.
*