char/sorcery

static-files based git repo viewer

git clone https://git.t4t.associates/char/sorcery

Charlotte Somsorcery-ssh: refactor3356bff

main
1.3 KiB29 linesraw
1const std = @import("std");
2
3/// Ask sorceryd to rebuild the site for `repo_path` now rather than on its
4/// next scan, and relay the site URL it reports so the pusher can find it.
5pub fn request(io: std.Io, environ: *const std.process.Environ.Map, repo_path: []const u8) void {
6    const socket = environ.get("SORCERY_CONTROL_SOCKET") orelse return;
7    send(io, socket, repo_path) catch |err| std.log.warn("site refresh failed: {}", .{err});
8}
9
10fn send(io: std.Io, socket_path: []const u8, repo_path: []const u8) !void {
11    const address = try std.Io.net.UnixAddress.init(socket_path);
12    const stream = try address.connect(io);
13    defer stream.close(io);
14
15    var write_buffer: [256]u8 = undefined;
16    var stream_writer = stream.writer(io, &write_buffer);
17    try stream_writer.interface.print("{s}\n", .{repo_path});
18    try stream_writer.interface.flush();
19
20    var read_buffer: [1024]u8 = undefined;
21    var stream_reader = stream.reader(io, &read_buffer);
22    const reply = try stream_reader.interface.takeDelimiter('\n') orelse return error.EmptyReply;
23    if (std.mem.eql(u8, reply, "ok")) return;
24    if (std.mem.startsWith(u8, reply, "ok ")) {
25        std.debug.print("sorcery: {s}\n", .{reply["ok ".len..]});
26    } else {
27        std.log.warn("site refresh failed: {s}", .{reply});
28    }
29}