@@ -62,11 +62,9 @@ const File = struct {
62
62
bad_status : std.http.Status ,
63
63
fetch_error : GetResult.FetchError ,
64
64
65
- pub fn format (res : Result , comptime fmt : []const u8 , options : std.fmt.FormatOptions , w : anytype ) ! void {
66
- if (fmt .len != 0 ) std .fmt .invalidFmtError (fmt , res );
67
- _ = options ;
65
+ pub fn format (res : Result , w : * std.Io.Writer ) std.Io.Writer.Error ! void {
68
66
switch (res ) {
69
- .ok = > | query_ns | try w .print ("{}" , .{std . fmt . fmtDuration ( query_ns ) }),
67
+ .ok = > | query_ns | try w .print ("{D }" , .{query_ns }),
70
68
.content_mismatch = > try w .writeAll (":warning: incorrect contents" ),
71
69
.fetch_error = > | fe | try w .print (":warning: error: {s}" , .{@errorName (fe .err )}),
72
70
.bad_status = > | s | try w .print (":warning: bad status: {d} {s}" , .{ @intFromEnum (s ), s .phrase () orelse "?" }),
@@ -102,7 +100,7 @@ const Mirror = struct {
102
100
}
103
101
};
104
102
105
- pub fn main () Allocator.Error ! u8 {
103
+ pub fn main () error { OutOfMemory , WriteFailed } ! u8 {
106
104
const gpa = std .heap .smp_allocator ;
107
105
108
106
var arena_state : std.heap.ArenaAllocator = .init (gpa );
@@ -199,12 +197,12 @@ pub fn main() Allocator.Error!u8 {
199
197
200
198
var any_failures = false ;
201
199
202
- var out_al : std .ArrayListUnmanaged ( u8 ) = .empty ;
203
- defer out_al .deinit (gpa );
204
- const out = out_al .writer ( gpa ) ;
200
+ var out_aw : std.Io.Writer.Allocating = .init ( gpa ) ;
201
+ defer out_aw .deinit ();
202
+ const out = & out_aw .writer ;
205
203
206
- var error_traces_out : std .ArrayListUnmanaged ( u8 ) = .empty ;
207
- defer error_traces_out .deinit (gpa );
204
+ var error_traces_out : std.Io.Writer.Allocating = .init ( gpa ) ;
205
+ defer error_traces_out .deinit ();
208
206
209
207
try out .writeAll ("## Tarballs\n\n " );
210
208
@@ -223,7 +221,7 @@ pub fn main() Allocator.Error!u8 {
223
221
try out .print ("\n | `{s}` | {s} |" , .{ file .name , file .version orelse "master" });
224
222
for (mirrors ) | m | {
225
223
if (m .file_result != .ok ) any_failures = true ;
226
- try out .print (" {} |" , .{m .file_result });
224
+ try out .print (" {f } |" , .{m .file_result });
227
225
trace : {
228
226
if (builtin .strip_debug_info ) break :trace ;
229
227
const fe = switch (m .file_result ) {
@@ -232,26 +230,26 @@ pub fn main() Allocator.Error!u8 {
232
230
};
233
231
const ert = fe .ert orelse break :trace ;
234
232
const self_info = std .debug .getSelfDebugInfo () catch break :trace ;
235
- try error_traces_out .append ( gpa , '\n ' );
236
- std .debug .writeStackTrace (ert , error_traces_out .writer ( gpa ) , self_info , .no_color ) catch | err | switch (err ) {
233
+ try error_traces_out .writer . writeByte ( '\n ' );
234
+ std .debug .writeStackTrace (ert , & error_traces_out .writer , self_info , .no_color ) catch | err | switch (err ) {
237
235
error .OutOfMemory = > | e | return e ,
238
236
else = > {},
239
237
};
240
- try error_traces_out .append ( gpa , '\n ' );
238
+ try error_traces_out .writer . writeByte ( '\n ' );
241
239
}
242
240
}
243
241
}
244
242
try out .writeAll ("\n | **Avg. time** | |" );
245
243
for (mirrors ) | * m | {
246
244
const avg_ns : u64 = if (m .ns_div == 0 ) 0 else m .total_ns / m .ns_div ;
247
- try out .print (" {} |" , .{std . fmt . fmtDuration ( avg_ns ) });
245
+ try out .print (" {D } |" , .{avg_ns });
248
246
// Reset for below
249
247
m .total_ns = 0 ;
250
248
m .ns_div = 0 ;
251
249
}
252
250
253
- if (error_traces_out .items .len > 0 ) {
254
- try out .print ("\n\n ### Error Traces\n\n ```{s}```" , .{error_traces_out .items });
251
+ if (error_traces_out .written () .len > 0 ) {
252
+ try out .print ("\n\n ### Error Traces\n\n ```{s}```" , .{error_traces_out .written () });
255
253
error_traces_out .clearRetainingCapacity ();
256
254
}
257
255
@@ -270,7 +268,7 @@ pub fn main() Allocator.Error!u8 {
270
268
try out .print ("\n | `{s}` | {s} |" , .{ file .name , file .version orelse "master" });
271
269
for (mirrors ) | m | {
272
270
if (m .file_result != .ok ) any_failures = true ;
273
- try out .print (" {} |" , .{m .file_result });
271
+ try out .print (" {f } |" , .{m .file_result });
274
272
trace : {
275
273
if (builtin .strip_debug_info ) break :trace ;
276
274
const fe = switch (m .file_result ) {
@@ -279,24 +277,24 @@ pub fn main() Allocator.Error!u8 {
279
277
};
280
278
const ert = fe .ert orelse break :trace ;
281
279
const self_info = std .debug .getSelfDebugInfo () catch break :trace ;
282
- try error_traces_out .append ( gpa , '\n ' );
283
- std .debug .writeStackTrace (ert , error_traces_out .writer ( gpa ) , self_info , .no_color ) catch | err | switch (err ) {
280
+ try error_traces_out .writer . writeByte ( '\n ' );
281
+ std .debug .writeStackTrace (ert , & error_traces_out .writer , self_info , .no_color ) catch | err | switch (err ) {
284
282
error .OutOfMemory = > | e | return e ,
285
283
else = > {},
286
284
};
287
- try error_traces_out .append ( gpa , '\n ' );
285
+ try error_traces_out .writer . writeByte ( '\n ' );
288
286
}
289
287
}
290
288
}
291
289
try out .writeAll ("\n | **Avg. time** | |" );
292
290
for (mirrors ) | * m | {
293
291
const avg_ns : u64 = if (m .ns_div == 0 ) 0 else m .total_ns / m .ns_div ;
294
- try out .print (" {} |" , .{std . fmt . fmtDuration ( avg_ns ) });
292
+ try out .print (" {D } |" , .{avg_ns });
295
293
// No need to reset, we're not doing any more checks
296
294
}
297
295
298
- if (error_traces_out .items .len > 0 ) {
299
- try out .print ("\n\n ### Error Traces\n\n ```{s}```" , .{error_traces_out .items });
296
+ if (error_traces_out .written () .len > 0 ) {
297
+ try out .print ("\n\n ### Error Traces\n\n ```{s}```" , .{error_traces_out .written () });
300
298
error_traces_out .clearRetainingCapacity ();
301
299
}
302
300
@@ -308,7 +306,7 @@ pub fn main() Allocator.Error!u8 {
308
306
};
309
307
defer out_file .close ();
310
308
311
- out_file .writeAll (out_al . items ) catch | err | {
309
+ out_file .writeAll (out_aw . written () ) catch | err | {
312
310
std .debug .panic ("failed to write output: {s}" , .{@errorName (err )});
313
311
};
314
312
}
@@ -406,14 +404,13 @@ fn httpGet(
406
404
http_client : * std.http.Client ,
407
405
url : []const u8 ,
408
406
) Allocator.Error ! GetResult {
409
- var buf : std .ArrayList ( u8 ) = .init (gpa );
410
- defer buf .deinit ();
407
+ var response : std.Io.Writer.Allocating = .init (gpa );
408
+ defer response .deinit ();
411
409
var timer = std .time .Timer .start () catch @panic ("std.time.Timer not supported" );
412
410
const res = http_client .fetch (.{
413
411
.method = .GET ,
414
412
.location = .{ .url = url },
415
- .response_storage = .{ .dynamic = & buf },
416
- .max_append_size = 512 * 1024 * 1024 ,
413
+ .response_writer = & response .writer ,
417
414
}) catch | err | {
418
415
const ert : ? std.builtin.StackTrace = if (@errorReturnTrace ()) | ert | ert : {
419
416
const new_addrs = try arena .dupe (usize , ert .instruction_addresses );
@@ -428,7 +425,7 @@ fn httpGet(
428
425
return .{ .bad_status = res .status };
429
426
}
430
427
return .{ .success = .{
431
- .data = try buf .toOwnedSlice (),
428
+ .data = try response .toOwnedSlice (),
432
429
.query_ns = timer .read (),
433
430
} };
434
431
}
0 commit comments