about summary refs log tree commit diff
path: root/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main.zig54
1 files changed, 20 insertions, 34 deletions
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);
 }