diff options
| author | Robert Günzler <r@gnzler.io> | 2025-10-03 17:38:27 +0200 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2025-10-03 18:42:16 +0200 |
| commit | fa17cbf6b3486c74305eec5c93f799a4263b7317 (patch) | |
| tree | 75199128b43376fc5430c9a01ee2557ec8f759a2 /src/exe.zig | |
| parent | ea7deae11b488c4d4b6a15f8e6272bd7a5550866 (diff) | |
| download | site-fa17cbf6b3486c74305eec5c93f799a4263b7317.tar.gz | |
retain source file mtime when rendering with pandoc
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'src/exe.zig')
| -rw-r--r-- | src/exe.zig | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/exe.zig b/src/exe.zig index bfe7370..2af8b66 100644 --- a/src/exe.zig +++ b/src/exe.zig @@ -24,6 +24,16 @@ pub fn run_pandoc(ctx: *Context) !void { .{page}, ); + // get mtime of the source document + const mtime = try fs.get_mtime(ctx.allocator(), source_path); + const mtime_str = try fs.format_mtime(ctx.allocator(), mtime, "%s"); + defer ctx.allocator().free(mtime_str); + + // make pandoc runs reproducable + var env_map = std.process.EnvMap.init(ctx.allocator()); + defer env_map.deinit(); + try env_map.put("SOURCE_DATE_EPOCH", mtime_str); + try capture_stdout(ctx, &.{ Context.params.PANDOC, "--from", @@ -36,13 +46,13 @@ pub fn run_pandoc(ctx: *Context) !void { "--strip-comments", "--output=-", source_path, - }, f.writer().any()); + }, &env_map, f.writer().any()); } log.info("Processed {d} markdown files.", .{ctx.markdown.items.len}); } -pub fn capture_stdout(ctx: *Context, argv: []const []const u8, buf: std.io.AnyWriter) !void { +pub fn capture_stdout(ctx: *Context, argv: []const []const u8, env_map: ?*std.process.EnvMap, buf: std.io.AnyWriter) !void { const command = try std.mem.join(ctx.allocator(), " ", argv); defer ctx.allocator().free(command); const label = try std.fmt.allocPrint(ctx.allocator(), "running {s}", .{command}); @@ -54,6 +64,7 @@ pub fn capture_stdout(ctx: *Context, argv: []const []const u8, buf: std.io.AnyWr var p = std.process.Child.init(argv, std.heap.page_allocator); p.stdout_behavior = .Pipe; p.progress_node = ctx.progress_nodes.getLast(); + p.env_map = env_map; try p.spawn(); |