authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-03-06 18:35:32-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-03-10 17:51:06-07:00
logc427685a13a2bb98ccc6944d18bb3e6ee17dcdff
tree0ef3e8e77d09f3bee0c5916cc13a85aea3dce85e
parentb7ba0b69b19a20523af751c0935882ddba579c8c

zig std: implement sources.tar endpoint

except for the tar format being correct

1 files changed, 41 insertions(+), 6 deletions(-)

lib/compiler/std-docs.zig+41-6
......@@ -119,7 +119,6 @@ fn serveDocsFile(
119119 const file_contents = try context.lib_dir.readFileAlloc(gpa, name, 10 * 1024 * 1024);
120120 defer gpa.free(file_contents);
121121 try request.respond(file_contents, .{
122 .status = .ok,
123122 .extra_headers = &.{
124123 .{ .name = "content-type", .value = content_type },
125124 cache_control_header,
......@@ -128,9 +127,46 @@ fn serveDocsFile(
128127}
129128
130129fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
131 _ = request;
132 _ = context;
133 @panic("TODO");
130 const gpa = context.gpa;
131
132 var send_buffer: [0x4000]u8 = undefined;
133 var response = request.respondStreaming(.{
134 .send_buffer = &send_buffer,
135 .respond_options = .{
136 .extra_headers = &.{
137 .{ .name = "content-type", .value = "application/x-tar" },
138 cache_control_header,
139 },
140 },
141 });
142 const w = response.writer();
143 try w.writeAll("tar header");
144
145 var std_dir = try context.lib_dir.openDir("std", .{ .iterate = true });
146 defer std_dir.close();
147
148 var walker = try std_dir.walk(gpa);
149 defer walker.deinit();
150
151 while (try walker.next()) |entry| {
152 switch (entry.kind) {
153 .file => {
154 if (!std.mem.endsWith(u8, entry.basename, ".zig"))
155 continue;
156 if (std.mem.endsWith(u8, entry.basename, "test.zig"))
157 continue;
158 },
159 else => continue,
160 }
161
162 try w.writeAll(entry.path);
163
164 var file = try std_dir.openFile(entry.path, .{});
165 defer file.close();
166
167 try w.writeFile(file);
168 }
169 try response.end();
134170}
135171
136172fn serveWasm(
......@@ -151,7 +187,6 @@ fn serveWasm(
151187 const file_contents = try std.fs.cwd().readFileAlloc(gpa, wasm_binary_path, 10 * 1024 * 1024);
152188 defer gpa.free(file_contents);
153189 try request.respond(file_contents, .{
154 .status = .ok,
155190 .extra_headers = &.{
156191 .{ .name = "content-type", .value = "application/wasm" },
157192 cache_control_header,
......@@ -250,7 +285,7 @@ fn buildWasmBinary(
250285 const EbpHdr = std.zig.Server.Message.EmitBinPath;
251286 const ebp_hdr = @as(*align(1) const EbpHdr, @ptrCast(body));
252287 if (!ebp_hdr.flags.cache_hit) {
253 std.log.info("source changes detected; rebuilding wasm component", .{});
288 std.log.info("source changes detected; rebuilt wasm component", .{});
254289 }
255290 result = try arena.dupe(u8, body[@sizeOf(EbpHdr)..]);
256291 },