summaryrefslogtreecommitdiff
path: root/src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java')
-rw-r--r--src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java49
1 files changed, 35 insertions, 14 deletions
diff --git a/src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java b/src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java
index ef5ed1d..9e9d5f9 100644
--- a/src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java
+++ b/src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java
@@ -11,11 +11,11 @@ import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.file.Path;
-import java.util.List;
import java.util.Objects;
import java.util.concurrent.Callable;
import java.util.stream.Collectors;
+import static io.trygvis.rules.engine.cli.EngineFile.*;
import static picocli.CommandLine.Command;
@Command(name = "ninja")
@@ -45,6 +45,23 @@ public class NinjaCommand implements Callable<Integer> {
dbDir = Path.of(f.dbDir);
}
+ for (var job : f.jobs) {
+ if (job.outputs.isEmpty()) {
+ var output = new Output();
+ output.name = job.name;
+ output.includes = job.outputIncludes;
+ job.outputIncludes = null;
+
+ job.outputs.add(output);
+ }
+ }
+
+ if (false) {
+ System.out.println("----------------------------------------------------");
+ System.out.println(f);
+ System.out.println("----------------------------------------------------");
+ }
+
var buf = new StringWriter();
var out = new PrintWriter(buf);
@@ -69,25 +86,22 @@ public class NinjaCommand implements Callable<Integer> {
out.println("");
out.println("build engine.png: dot-to-png engine.dot");
out.println("");
- out.println("# Jobs");
+ out.println("rule engine-run");
+ out.println(" command=engine run $name $inputs $output_state $output_includes $generated_output $agenda_groups $modules");
+ out.println();
+ out.println("### Jobs");
for (var job : f.jobs) {
out.println("");
-
- out.println("rule %s".formatted(job.name));
- out.println(" command=engine run $name $inputs $output_state $output_includes $generated_output $agenda_groups $modules");
- out.println();
var dependencies = job.inputs.stream()
.map(s -> dbDir.resolve(s + ".yaml").toString())
.collect(Collectors.joining(" "));
- var outputState = dbDir.resolve(job.name + ".yaml");
-
- var generated = List.of(outputState).stream()
- .map(Path::toString)
+ var generated = job.outputs.stream()
+ .map(output -> dbDir.resolve(output.name + ".yaml").toString())
.collect(Collectors.joining(" "));
- out.println("build %s: %s %s".formatted(generated, job.name, dependencies));
+ out.println("build %s: engine-run %s".formatted(generated, dependencies));
out.println(" name=--name %s".formatted(job.name));
if (!job.inputs.isEmpty()) {
@@ -98,9 +112,16 @@ public class NinjaCommand implements Callable<Integer> {
out.println(" inputs=$%s".formatted(is));
}
- out.println(" output_state=--output-state %s".formatted(outputState));
- if (!job.outputIncludes.isEmpty()) {
- var str = job.outputIncludes.stream()
+ if (job.outputs.size() != 1) {
+ System.err.println("Only one output supported for now.");
+ return 1;
+ }
+
+ var output = job.outputs.get(0);
+
+ out.println(" output_state=--output-state %s".formatted(dbDir.resolve(output.name + ".yaml")));
+ if (!output.includes.isEmpty()) {
+ var str = output.includes.stream()
.map(s -> "--output-include=" + s)
.collect(Collectors.joining(" $\n ", "\n ", ""));