@@ -456,7 +456,6 @@ fn serveSourcesTar(ws: *WebServer, request: *std.http.Server.Request) !void {
456
456
},
457
457
},
458
458
});
459
- const w = response .writer ();
460
459
461
460
const DedupeTable = std .ArrayHashMapUnmanaged (Build .Cache .Path , void , Build .Cache .Path .TableAdapter , false );
462
461
var dedupe_table : DedupeTable = .{};
@@ -490,40 +489,21 @@ fn serveSourcesTar(ws: *WebServer, request: *std.http.Server.Request) !void {
490
489
491
490
var cwd_cache : ? []const u8 = null ;
492
491
492
+ var archiver = std .tar .writer (response .writer ());
493
+
493
494
for (deduped_paths ) | joined_path | {
494
495
var file = joined_path .root_dir .handle .openFile (joined_path .sub_path , .{}) catch | err | {
495
496
log .err ("failed to open {}: {s}" , .{ joined_path , @errorName (err ) });
496
497
continue ;
497
498
};
498
499
defer file .close ();
499
500
500
- const stat = file .stat () catch | err | {
501
- log .err ("failed to stat {}: {s}" , .{ joined_path , @errorName (err ) });
502
- continue ;
503
- };
504
- if (stat .kind != .file )
505
- continue ;
506
-
507
- const padding = p : {
508
- const remainder = stat .size % 512 ;
509
- break :p if (remainder > 0 ) 512 - remainder else 0 ;
510
- };
511
-
512
- var file_header = std .tar .output .Header .init ();
513
- file_header .typeflag = .regular ;
514
- try file_header .setPath (
515
- joined_path .root_dir .path orelse try memoizedCwd (arena , & cwd_cache ),
516
- joined_path .sub_path ,
517
- );
518
- try file_header .setSize (stat .size );
519
- try file_header .updateChecksum ();
520
- try w .writeAll (std .mem .asBytes (& file_header ));
521
- try w .writeFile (file );
522
- try w .writeByteNTimes (0 , padding );
501
+ archiver .prefix = joined_path .root_dir .path orelse try memoizedCwd (arena , & cwd_cache );
502
+ try archiver .writeFile (joined_path .sub_path , file );
523
503
}
524
504
525
505
// intentionally omitting the pointless trailer
526
- //try w.writeByteNTimes(0, 512 * 2 );
506
+ //try archiver.finish( );
527
507
try response .end ();
528
508
}
529
509
0 commit comments