From 3186ca5eb1ba8294539abe664ce7d5a680571e91 Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Sun, 5 Oct 2025 18:32:28 +0200 Subject: make cli handle multiple commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Robert Günzler --- src/main.zig | 54 ++++++++++++++++++++---------------------------------- 1 file changed, 20 insertions(+), 34 deletions(-) (limited to 'src/main.zig') diff --git a/src/main.zig b/src/main.zig index f64bfad..35d1e0c 100644 --- a/src/main.zig +++ b/src/main.zig @@ -99,6 +99,9 @@ pub const Context = struct { }; fn index(ctx: *Context) !void { + // avoid reindexing + if ((ctx.pages.items.len != 0) and (ctx.markdown.items.len != 0)) return; + ctx.progress_start("index"); defer ctx.progress_end(); @@ -139,23 +142,20 @@ fn index(ctx: *Context) !void { return; } -const RunFn = fn (*Context) void; - const Cli = struct { - fn parse() *const RunFn { + fn run(ctx: *Context) !void { var argv = std.process.args(); - const more = argv.skip(); // skip arg0 - if (!more) return &Cli.helpCmd; + _ = argv.skip(); // skip arg0 - const next_arg = argv.next() orelse return &Cli.helpCmd; - - if (std.mem.eql(u8, next_arg, "gen")) { - return &Cli.genCmd; - } else if (std.mem.eql(u8, next_arg, "md")) { - return &Cli.genMdCmd; - } else { - return &Cli.helpCmd; + while (argv.next()) |arg| { + if (std.mem.eql(u8, arg, "gen")) { + try Cli.genCmd(ctx); + } else if (std.mem.eql(u8, arg, "md")) { + try Cli.genMdCmd(ctx); + } else { + return Cli.helpCmd(ctx); + } } } @@ -163,28 +163,14 @@ const Cli = struct { std.debug.print("usage: rbl [gen|md]\n\n", .{}); } - fn genCmd(ctx: *Context) void { - index(ctx) catch { - log.err("Failed to index pages.", .{}); - std.os.linux.exit(1); - }; - - gen.generate(ctx) catch { - log.err("Failed to generate site.", .{}); - std.os.linux.exit(1); - }; + fn genCmd(ctx: *Context) !void { + try index(ctx); + try gen.generate(ctx); } - fn genMdCmd(ctx: *Context) void { - index(ctx) catch { - log.err("Failed to index pages.", .{}); - std.os.linux.exit(1); - }; - - exe.runPandoc(ctx) catch { - log.err("Failed to process markdown files.", .{}); - std.os.linux.exit(1); - }; + fn genMdCmd(ctx: *Context) !void { + try index(ctx); + try exe.runPandoc(ctx); } }; @@ -196,5 +182,5 @@ pub fn main() !void { var ctx = try Context.create(allocator); defer ctx.destroy(); - Cli.parse()(ctx); + try Cli.run(ctx); } -- cgit 1.4.1