const std = @import("std"); /// Ask sorceryd to rebuild the site for `repo_path` now rather than on its /// next scan, and relay the site URL it reports so the pusher can find it. pub fn request(io: std.Io, environ: *const std.process.Environ.Map, repo_path: []const u8) void { const socket = environ.get("SORCERY_CONTROL_SOCKET") orelse return; send(io, socket, repo_path) catch |err| std.log.warn("site refresh failed: {}", .{err}); } fn send(io: std.Io, socket_path: []const u8, repo_path: []const u8) !void { const address = try std.Io.net.UnixAddress.init(socket_path); const stream = try address.connect(io); defer stream.close(io); var write_buffer: [256]u8 = undefined; var stream_writer = stream.writer(io, &write_buffer); try stream_writer.interface.print("{s}\n", .{repo_path}); try stream_writer.interface.flush(); var read_buffer: [1024]u8 = undefined; var stream_reader = stream.reader(io, &read_buffer); const reply = try stream_reader.interface.takeDelimiter('\n') orelse return error.EmptyReply; if (std.mem.eql(u8, reply, "ok")) return; if (std.mem.startsWith(u8, reply, "ok ")) { std.debug.print("sorcery: {s}\n", .{reply["ok ".len..]}); } else { std.log.warn("site refresh failed: {s}", .{reply}); } }