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 org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.snakeyaml.engine.v2.api.Load;
|
||||
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>
|
||||
* </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
|
||||
* an unmodified copy, then this is the responsibility of the caller.
|
||||
* @return An updated list with all values expanded and injected
|
||||
@ -59,10 +66,10 @@ public class NBAtFile {
|
||||
ListIterator<String> iter = processInPlace.listIterator();
|
||||
while (iter.hasNext()) {
|
||||
String spec = iter.next();
|
||||
if (spec.startsWith("@")) {
|
||||
if (spec.startsWith("@") || spec.startsWith("include=")|| spec.startsWith("include:")) {
|
||||
iter.previous();
|
||||
iter.remove();
|
||||
LinkedList<String> spliceIn = includeAt(spec);
|
||||
LinkedList<String> spliceIn = includeAt(spec.replaceFirst("include=","@").replaceFirst("include:","@"));
|
||||
for (String s : spliceIn) {
|
||||
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
|
||||
*/
|
||||
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);
|
||||
if (matcher.matches()) {
|
||||
String filepathSpec = matcher.group("filepath");
|
||||
@ -135,7 +158,6 @@ public class NBAtFile {
|
||||
} else {
|
||||
throw new RuntimeException("Unable to match at-file specifier: " + spec + " to pattern '" + includePattern.pattern() + "'");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
@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