mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2024-12-23 15:40:44 -06:00
add basic recursion to atfiles
This commit is contained in:
parent
5190bad443
commit
29e1dbe122
@ -21,6 +21,7 @@ import io.nosqlbench.nb.api.nbio.NBIO;
|
|||||||
import io.nosqlbench.nb.api.nbio.NBPathsAPI;
|
import io.nosqlbench.nb.api.nbio.NBPathsAPI;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.snakeyaml.engine.v2.api.Load;
|
import org.snakeyaml.engine.v2.api.Load;
|
||||||
import org.snakeyaml.engine.v2.api.LoadSettings;
|
import org.snakeyaml.engine.v2.api.LoadSettings;
|
||||||
|
|
||||||
@ -49,6 +50,12 @@ public class NBAtFile {
|
|||||||
* <LI>{@code >-- } asserts each value starts with global option syntax (--)</LI>
|
* <LI>{@code >-- } asserts each value starts with global option syntax (--)</LI>
|
||||||
* </UL>
|
* </UL>
|
||||||
*
|
*
|
||||||
|
* <P>Files can be included recursively using a format like <PRE>{@code
|
||||||
|
* - include:${DIR}/somefile.yaml
|
||||||
|
* }</PRE></P>
|
||||||
|
*
|
||||||
|
* Standard formatting specifiers above should work in this mode as well.
|
||||||
|
*
|
||||||
* @param processInPlace The linked list which is statefully modified. If you need
|
* @param processInPlace The linked list which is statefully modified. If you need
|
||||||
* an unmodified copy, then this is the responsibility of the caller.
|
* an unmodified copy, then this is the responsibility of the caller.
|
||||||
* @return An updated list with all values expanded and injected
|
* @return An updated list with all values expanded and injected
|
||||||
@ -59,10 +66,10 @@ public class NBAtFile {
|
|||||||
ListIterator<String> iter = processInPlace.listIterator();
|
ListIterator<String> iter = processInPlace.listIterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
String spec = iter.next();
|
String spec = iter.next();
|
||||||
if (spec.startsWith("@")) {
|
if (spec.startsWith("@") || spec.startsWith("include=")|| spec.startsWith("include:")) {
|
||||||
iter.previous();
|
iter.previous();
|
||||||
iter.remove();
|
iter.remove();
|
||||||
LinkedList<String> spliceIn = includeAt(spec);
|
LinkedList<String> spliceIn = includeAt(spec.replaceFirst("include=","@").replaceFirst("include:","@"));
|
||||||
for (String s : spliceIn) {
|
for (String s : spliceIn) {
|
||||||
iter.add(s);
|
iter.add(s);
|
||||||
}
|
}
|
||||||
@ -89,6 +96,22 @@ public class NBAtFile {
|
|||||||
* @return The linked list of arguments which is to be spliced into the caller's command list
|
* @return The linked list of arguments which is to be spliced into the caller's command list
|
||||||
*/
|
*/
|
||||||
public static LinkedList<String> includeAt(String spec) {
|
public static LinkedList<String> includeAt(String spec) {
|
||||||
|
LinkedList<String> toInclude = doInclude(spec);
|
||||||
|
boolean recurse = false;
|
||||||
|
for (String s : toInclude) {
|
||||||
|
if (s.startsWith("include=")||s.startsWith("include:")) {
|
||||||
|
recurse=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (recurse) {
|
||||||
|
toInclude=includeAt(toInclude);
|
||||||
|
}
|
||||||
|
return toInclude;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static @NotNull LinkedList<String> doInclude(String spec) {
|
||||||
Matcher matcher = includePattern.matcher(spec);
|
Matcher matcher = includePattern.matcher(spec);
|
||||||
if (matcher.matches()) {
|
if (matcher.matches()) {
|
||||||
String filepathSpec = matcher.group("filepath");
|
String filepathSpec = matcher.group("filepath");
|
||||||
@ -135,7 +158,6 @@ public class NBAtFile {
|
|||||||
} else {
|
} else {
|
||||||
throw new RuntimeException("Unable to match at-file specifier: " + spec + " to pattern '" + includePattern.pattern() + "'");
|
throw new RuntimeException("Unable to match at-file specifier: " + spec + " to pattern '" + includePattern.pattern() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static LinkedList<String> interposePath(LinkedList<String> formatted, Path atPath) {
|
private static LinkedList<String> interposePath(LinkedList<String> formatted, Path atPath) {
|
||||||
|
@ -79,4 +79,9 @@ class NBAtFileTest {
|
|||||||
assertThat(strings).containsExactly("--option1", "--option2=value2", "--option3=value3", "--option4=value4");
|
assertThat(strings).containsExactly("--option1", "--option2=value2", "--option3=value3", "--option4=value4");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAtfileRecursion() {
|
||||||
|
LinkedList<String> strings = NBAtFile.includeAt("@src/test/resources/atfiles/simple_recursion.yaml");
|
||||||
|
assertThat(strings).containsExactly("arg1","arg1","arg2","arg3","arg3");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
- arg1
|
||||||
|
- include:${DIR}/simple_list.yaml
|
||||||
|
- arg3
|
Loading…
Reference in New Issue
Block a user