Gentoo Archives: gentoo-commits

From: "Miroslav Šulc" <fordfrog@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/java-ebuilder:master commit in: src/main/java/org/gentoo/java/ebuilder/portage/, ...
Date: Fri, 01 Nov 2019 19:41:57
Message-Id: 1572637303.889bcaf2504570a64c9b0a8e1f22b092a83e0c0c.fordfrog@gentoo
1 commit: 889bcaf2504570a64c9b0a8e1f22b092a83e0c0c
2 Author: Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
3 AuthorDate: Fri Nov 1 19:41:43 2019 +0000
4 Commit: Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
5 CommitDate: Fri Nov 1 19:41:43 2019 +0000
6 URL: https://gitweb.gentoo.org/proj/java-ebuilder.git/commit/?id=889bcaf2
7
8 added parsing of ebuild file name components
9
10 Signed-off-by: Miroslav Šulc <fordfrog <AT> gentoo.org>
11
12 src/main/java/org/gentoo/java/ebuilder/Config.java | 66 ++++++++++++++++++++++
13 src/main/java/org/gentoo/java/ebuilder/Main.java | 30 ++++++++++
14 .../java/ebuilder/portage/PortageParser.java | 45 +++++++++++++++
15 3 files changed, 141 insertions(+)
16
17 diff --git a/src/main/java/org/gentoo/java/ebuilder/Config.java b/src/main/java/org/gentoo/java/ebuilder/Config.java
18 index 4127266..9bc98f8 100644
19 --- a/src/main/java/org/gentoo/java/ebuilder/Config.java
20 +++ b/src/main/java/org/gentoo/java/ebuilder/Config.java
21 @@ -28,6 +28,18 @@ public class Config {
22 * Path to ebuild file that should be generated.
23 */
24 private Path ebuild;
25 + /**
26 + * Ebuild name.
27 + */
28 + private String ebuildName;
29 + /**
30 + * Ebuild version excluding suffix.
31 + */
32 + private String ebuildVersion;
33 + /**
34 + * Ebuild version suffix (-r).
35 + */
36 + private String ebuildVersionSuffix;
37 /**
38 * Writer for errors.
39 */
40 @@ -144,6 +156,60 @@ public class Config {
41 this.ebuild = ebuild;
42 }
43
44 + /**
45 + * Getter for {@link #ebuildName}.
46 + *
47 + * @return {@link #ebuildName}
48 + */
49 + public String getEbuildName() {
50 + return ebuildName;
51 + }
52 +
53 + /**
54 + * Setter for {@link #ebuildName}.
55 + *
56 + * @param ebuildName {@link #ebuildName}
57 + */
58 + public void setEbuildName(final String ebuildName) {
59 + this.ebuildName = ebuildName;
60 + }
61 +
62 + /**
63 + * Getter for {@link #ebuildVersion}.
64 + *
65 + * @return {@link #ebuildVersion}
66 + */
67 + public String getEbuildVersion() {
68 + return ebuildVersion;
69 + }
70 +
71 + /**
72 + * Setter for {@link #ebuildVersion}.
73 + *
74 + * @param ebuildVersion {@link #ebuildVersion}
75 + */
76 + public void setEbuildVersion(final String ebuildVersion) {
77 + this.ebuildVersion = ebuildVersion;
78 + }
79 +
80 + /**
81 + * Getter for {@link #ebuildVersionSuffix}.
82 + *
83 + * @return {@link #ebuildVersionSuffix}
84 + */
85 + public String getEbuildVersionSuffix() {
86 + return ebuildVersionSuffix;
87 + }
88 +
89 + /**
90 + * Setter for {@link #ebuildVersionSuffix}.
91 + *
92 + * @param ebuildVersionSuffix {@link #ebuildVersionSuffix}
93 + */
94 + public void setEbuildVersionSuffix(final String ebuildVersionSuffix) {
95 + this.ebuildVersionSuffix = ebuildVersionSuffix;
96 + }
97 +
98 /**
99 * Getter for {@link #errorWriter}.
100 *
101
102 diff --git a/src/main/java/org/gentoo/java/ebuilder/Main.java b/src/main/java/org/gentoo/java/ebuilder/Main.java
103 index 5921ea1..6c5cd13 100644
104 --- a/src/main/java/org/gentoo/java/ebuilder/Main.java
105 +++ b/src/main/java/org/gentoo/java/ebuilder/Main.java
106 @@ -9,6 +9,7 @@ import java.net.URI;
107 import java.net.URISyntaxException;
108 import java.nio.file.Paths;
109 import java.util.List;
110 +import java.util.Map;
111 import org.gentoo.java.ebuilder.maven.MavenCache;
112 import org.gentoo.java.ebuilder.maven.MavenEbuilder;
113 import org.gentoo.java.ebuilder.maven.MavenParser;
114 @@ -159,6 +160,8 @@ public class Main {
115 * @param config application configuration
116 */
117 private static void generateEbuild(final Config config) {
118 + parseEbuildName(config);
119 +
120 final MavenCache mavenCache = new MavenCache();
121 mavenCache.loadCache(config);
122
123 @@ -253,6 +256,33 @@ public class Main {
124 }
125 }
126
127 + /**
128 + * Parses ebuild file name into its components.
129 + *
130 + * @param config app configuration containing ebuild information
131 + */
132 + private static void parseEbuildName(final Config config) {
133 + final Map<String, String> result;
134 +
135 + try {
136 + result = PortageParser.parseEbuildName(
137 + config.getEbuild().getFileName().toString());
138 +
139 + config.setEbuildName(result.get("name"));
140 + config.setEbuildVersion(result.get("version"));
141 + config.setEbuildVersionSuffix(result.get("suffix"));
142 +
143 + config.getStdoutWriter().println("Parsed ebuild file name - name: "
144 + + config.getEbuildName() + " version: "
145 + + config.getEbuildVersion() + " suffix: "
146 + + config.getEbuildVersionSuffix());
147 + } catch (final IllegalArgumentException ex) {
148 + config.getStdoutWriter().println("Cannot parse ebuild file name");
149 +
150 + Runtime.getRuntime().exit(1);
151 + }
152 + }
153 +
154 /**
155 * Prints application usage information.
156 */
157
158 diff --git a/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java b/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
159 index d504b2c..a85fe6c 100644
160 --- a/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
161 +++ b/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
162 @@ -49,6 +49,11 @@ public class PortageParser {
163 * Current java utilities eclass name.
164 */
165 private static final String ECLASS_JAVA_UTILS = "java-utils-2";
166 + /**
167 + * Pattern for parsing ebuild file name.
168 + */
169 + private static final Pattern PATTERN_EBUILD_NAME = Pattern.compile(
170 + "^(\\S+?)-([^-]+)(?:-(r\\d+))?\\.ebuild$");
171 /**
172 * Pattern for parsing SLOT with bash substring.
173 */
174 @@ -67,6 +72,46 @@ public class PortageParser {
175 */
176 private static final Pattern PATTERN_VARIABLE = Pattern.compile(
177 "^(\\S+?)=(.*)$");
178 +
179 + /**
180 + * Parses ebuild name into map. Keys are:
181 + * <dl>
182 + * <dt>name</dt>
183 + * <dd>ebuild name</dd>
184 + * <dt>version</dt>
185 + * <dd>ebuild version</dd>
186 + * <dt>suffix</dt>
187 + * <dd>ebuild version suffix (-r)</dd>
188 + * </dl>
189 + * If suffix is not present in ebuild name, it is not put into the map
190 + * aswell.
191 + *
192 + * @param name ebuild file name
193 + *
194 + * @return map of parsed values
195 + *
196 + * @throws IllegalArgumentException Thrown if the ebuild file name is not
197 + * valid or it cannot be parsed.
198 + */
199 + public static Map<String, String> parseEbuildName(final String name) {
200 + final Matcher matcher = PATTERN_EBUILD_NAME.matcher(name);
201 +
202 + if (!matcher.matches()) {
203 + throw new IllegalArgumentException("Ebuild file name is not valid "
204 + + "or parser does not support this ebuild name format");
205 + }
206 +
207 + final Map<String, String> result = new HashMap<>(3);
208 + result.put("name", matcher.group(1));
209 + result.put("version", matcher.group(2));
210 +
211 + if (matcher.groupCount() > 2) {
212 + result.put("suffix", matcher.group(3));
213 + }
214 +
215 + return result;
216 + }
217 +
218 /**
219 * List of cache items. This list is populated during parsing the tree.
220 */