diff options
-rw-r--r-- | src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java | 44 |
1 files changed, 43 insertions, 1 deletions
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). @@ -391,6 +399,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. + * * @param slot SLOT string * @param pv PV variable * @param variables map of collected variables and their values |