diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-03-06 18:35:32 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-03-10 17:51:06 -0700 |
| commit | c427685a13a2bb98ccc6944d18bb3e6ee17dcdff (patch) | |
| tree | 0ef3e8e77d09f3bee0c5916cc13a85aea3dce85e /lib/compiler/std-docs.zig | |
| parent | b7ba0b69b19a20523af751c0935882ddba579c8c (diff) | |
| download | zig-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.zig | 47 |
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)..]); }, |
