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