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