Add build parameter to start at a specific exercise

This commit is contained in:
Michael Cooper 2024-08-08 08:23:14 -07:00
parent 94d6a4da5f
commit 70b0522cb2
No known key found for this signature in database
2 changed files with 28 additions and 1 deletions

View file

@ -69,7 +69,7 @@ reading these.
## A Note About Versions ## A Note About Versions
**Hint:** To check out Ziglings for a stable release of Zig, you can use **Hint:** To check out Ziglings for a stable release of Zig, you can use
the appropriate tag. the appropriate tag.
The Zig language is under very active development. In order to be The Zig language is under very active development. In order to be
current, Ziglings tracks **development** builds of the Zig current, Ziglings tracks **development** builds of the Zig
@ -128,6 +128,12 @@ It can be handy to check just a single exercise:
zig build -Dn=19 zig build -Dn=19
``` ```
Or run all exercises, starting from a specific one:
```
zig build -Ds=27
```
Or let Ziglings pick an exercise for you: Or let Ziglings pick an exercise for you:
``` ```

View file

@ -161,6 +161,7 @@ pub fn build(b: *Build) !void {
const override_healed_path = b.option([]const u8, "healed-path", "Override healed path"); const override_healed_path = b.option([]const u8, "healed-path", "Override healed path");
const exno: ?usize = b.option(usize, "n", "Select exercise"); const exno: ?usize = b.option(usize, "n", "Select exercise");
const rand: ?bool = b.option(bool, "random", "Select random exercise"); const rand: ?bool = b.option(bool, "random", "Select random exercise");
const start: ?usize = b.option(usize, "s", "Start at exercise");
const sep = std.fs.path.sep_str; const sep = std.fs.path.sep_str;
const healed_path = if (override_healed_path) |path| const healed_path = if (override_healed_path) |path|
@ -221,6 +222,26 @@ pub fn build(b: *Build) !void {
return; return;
} }
if (start) |s| {
if (s == 0 or s > exercises.len - 1) {
print("unknown exercise number: {}\n", .{s});
std.process.exit(2);
}
const first = exercises[s - 1];
const ziglings_step = b.step("ziglings", b.fmt("Check ziglings starting with {s}", .{first.main_file}));
b.default_step = ziglings_step;
var prev_step = &header_step.step;
for (exercises[(s - 1)..]) |ex| {
const verify_stepn = ZiglingStep.create(b, ex, work_path, .normal);
verify_stepn.step.dependOn(prev_step);
prev_step = &verify_stepn.step;
}
ziglings_step.dependOn(prev_step);
return;
}
// Normal build mode: verifies all exercises according to the recommended // Normal build mode: verifies all exercises according to the recommended
// order. // order.
const ziglings_step = b.step("ziglings", "Check all ziglings"); const ziglings_step = b.step("ziglings", "Check all ziglings");