about summary refs log tree commit diff
path: root/src/exe.zig
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2026-01-29 20:45:48 +0100
committerRobert Günzler <r@gnzler.io>2026-01-29 21:38:25 +0100
commitb512bd5a8b2de977c2191a21bfafaf54c0be70b4 (patch)
treeaacdfd792fe2dbf9f4cf0d87ab742b1762cd337a /src/exe.zig
parent380931bc9588268fa09485be863d2fd3806f8f0d (diff)
downloadsite-b512bd5a8b2de977c2191a21bfafaf54c0be70b4.tar.gz
enable auto-commit of changes
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to '')
-rw-r--r--src/exe.zig40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/exe.zig b/src/exe.zig
index fc24c50..998ea3b 100644
--- a/src/exe.zig
+++ b/src/exe.zig
@@ -82,7 +82,6 @@ fn pandocWorker(ctx: *Context, page: []const u8) !void {
     defer ctx.allocator().free(mtime_str);
 
     const f = try fs.FileSwapper.createAt(ctx.allocator(), target_path);
-    defer f.close();
 
     var buffer: [1024]u8 = undefined;
     var w = f.writer(&buffer);
@@ -113,6 +112,45 @@ fn pandocWorker(ctx: *Context, page: []const u8) !void {
         "--output=-",
         source_path,
     }, &env_map, &w.interface);
+
+    f.close();
+
+    if (f.swapped.*) {
+        try ctx.generated.append(
+            ctx.allocator(),
+            try ctx.allocator().dupe(u8, target_path),
+        );
+    }
+}
+
+pub fn commit(ctx: *Context, paths: []const []const u8) !void {
+    // skip early if we have nothing to do
+    if (paths.len == 0) return;
+
+    // skip if staging is unclean
+    shell(ctx,
+        \\git diff --cached --exit-code
+    , null) catch |e| switch (e) {
+        error.NonZeroExitCode => return,
+        else => return e,
+    };
+
+    for (paths) |f| {
+        const cmd = try std.fmt.allocPrint(ctx.allocator(), "git add {s}", .{f});
+        defer ctx.allocator().free(cmd);
+
+        try shell(ctx, cmd, null);
+    }
+
+    try shell(ctx,
+        \\GIT_COMMITTER_NAME=rbc git commit --quiet --message=*
+    , null);
+
+    try shell(ctx,
+        \\git show --stat --pretty=oneline
+    , null);
+
+    log.info("Committed {d} paths", .{paths.len});
 }
 
 pub fn captureStdout(ctx: *Context, argv: []const []const u8, env_map: ?*std.process.EnvMap, w: *std.Io.Writer) !void {