aboutsummaryrefslogtreecommitdiff
path: root/lib/compiler/std-docs.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-03-06 18:35:32 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-03-10 17:51:06 -0700
commitc427685a13a2bb98ccc6944d18bb3e6ee17dcdff (patch)
tree0ef3e8e77d09f3bee0c5916cc13a85aea3dce85e /lib/compiler/std-docs.zig
parentb7ba0b69b19a20523af751c0935882ddba579c8c (diff)
downloadzig-c427685a13a2bb98ccc6944d18bb3e6ee17dcdff.tar.gz
zig-c427685a13a2bb98ccc6944d18bb3e6ee17dcdff.zip
zig std: implement sources.tar endpoint
except for the tar format being correct
Diffstat (limited to 'lib/compiler/std-docs.zig')
-rw-r--r--lib/compiler/std-docs.zig47
1 files changed, 41 insertions, 6 deletions
diff --git a/lib/compiler/std-docs.zig b/lib/compiler/std-docs.zig
index f1d0f87add..b14d900901 100644
--- a/lib/compiler/std-docs.zig
+++ b/lib/compiler/std-docs.zig
@@ -119,7 +119,6 @@ fn serveDocsFile(
const file_contents = try context.lib_dir.readFileAlloc(gpa, name, 10 * 1024 * 1024);
defer gpa.free(file_contents);
try request.respond(file_contents, .{
- .status = .ok,
.extra_headers = &.{
.{ .name = "content-type", .value = content_type },
cache_control_header,
@@ -128,9 +127,46 @@ fn serveDocsFile(
}
fn serveSourcesTar(request: *std.http.Server.Request, context: *Context) !void {
- _ = request;
- _ = context;
- @panic("TODO");
+ const gpa = context.gpa;
+
+ var send_buffer: [0x4000]u8 = undefined;
+ var response = request.respondStreaming(.{
+ .send_buffer = &send_buffer,
+ .respond_options = .{
+ .extra_headers = &.{
+ .{ .name = "content-type", .value = "application/x-tar" },
+ cache_control_header,
+ },
+ },
+ });
+ const w = response.writer();
+ try w.writeAll("tar header");
+
+ var std_dir = try context.lib_dir.openDir("std", .{ .iterate = true });
+ defer std_dir.close();
+
+ var walker = try std_dir.walk(gpa);
+ defer walker.deinit();
+
+ while (try walker.next()) |entry| {
+ switch (entry.kind) {
+ .file => {
+ if (!std.mem.endsWith(u8, entry.basename, ".zig"))
+ continue;
+ if (std.mem.endsWith(u8, entry.basename, "test.zig"))
+ continue;
+ },
+ else => continue,
+ }
+
+ try w.writeAll(entry.path);
+
+ var file = try std_dir.openFile(entry.path, .{});
+ defer file.close();
+
+ try w.writeFile(file);
+ }
+ try response.end();
}
fn serveWasm(
@@ -151,7 +187,6 @@ fn serveWasm(
const file_contents = try std.fs.cwd().readFileAlloc(gpa, wasm_binary_path, 10 * 1024 * 1024);
defer gpa.free(file_contents);
try request.respond(file_contents, .{
- .status = .ok,
.extra_headers = &.{
.{ .name = "content-type", .value = "application/wasm" },
cache_control_header,
@@ -250,7 +285,7 @@ fn buildWasmBinary(
const EbpHdr = std.zig.Server.Message.EmitBinPath;
const ebp_hdr = @as(*align(1) const EbpHdr, @ptrCast(body));
if (!ebp_hdr.flags.cache_hit) {
- std.log.info("source changes detected; rebuilding wasm component", .{});
+ std.log.info("source changes detected; rebuilt wasm component", .{});
}
result = try arena.dupe(u8, body[@sizeOf(EbpHdr)..]);
},