diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2021-02-05 09:47:22 +0100 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2021-02-05 09:47:22 +0100 |
commit | 6ae284b9b61558078e9003defc50966c3e41e45c (patch) | |
tree | 0f80b0edc5fdc08eb586c1067442e470db0ccf5b /src/ri-engine | |
parent | e63201efc11bf44a7d30fff0a82a9fefd29b8d46 (diff) | |
download | rules-sandbox-6ae284b9b61558078e9003defc50966c3e41e45c.tar.gz rules-sandbox-6ae284b9b61558078e9003defc50966c3e41e45c.tar.bz2 rules-sandbox-6ae284b9b61558078e9003defc50966c3e41e45c.tar.xz rules-sandbox-6ae284b9b61558078e9003defc50966c3e41e45c.zip |
Better ninja rules.
Diffstat (limited to 'src/ri-engine')
-rw-r--r-- | src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java | 36 | ||||
-rw-r--r-- | src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java | 49 |
2 files changed, 71 insertions, 14 deletions
diff --git a/src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java b/src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java index 8da0e39..bae14f7 100644 --- a/src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java +++ b/src/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java @@ -2,6 +2,7 @@ package io.trygvis.rules.engine.cli; import java.util.ArrayList; import java.util.List; +import java.util.StringJoiner; public class EngineFile { public String dbDir; @@ -10,9 +11,44 @@ public class EngineFile { public static class Job { public String name; public List<String> inputs = new ArrayList<>(); + public List<Output> outputs = new ArrayList<>(); public List<String> outputIncludes = new ArrayList<>(); public String generatedOutput; public List<String> agendaGroups = new ArrayList<>(); public List<String> modules = new ArrayList<>(); + + @Override + public String toString() { + return new StringJoiner(",\n", Job.class.getSimpleName() + "[", "]") + .add("name='" + name + "'") + .add("inputs=" + inputs) + .add("outputs=" + outputs) + .add("outputIncludes=" + outputIncludes) + .add("generatedOutput='" + generatedOutput + "'") + .add("agendaGroups=" + agendaGroups) + .add("modules=" + modules) + .toString(); + } + } + + public static class Output { + public String name; + public List<String> includes = new ArrayList<>(); + + @Override + public String toString() { + return new StringJoiner(",\n", Output.class.getSimpleName() + "[", "]") + .add("name='" + name + "'") + .add("includes=" + includes) + .toString(); + } + } + + @Override + public String toString() { + return new StringJoiner(",\n", EngineFile.class.getSimpleName() + "[", "]") + .add("dbDir='" + dbDir + "'") + .add("jobs=" + jobs) + .toString(); } } 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 ", "")); |