authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-03-01 14:40:14-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-03-15 10:48:13-07:00
log533c7b56f2624f1df6684a834f5780a38052bb00
tree19aa5a3d57c8baa423075aa68aa3273b1c7f559b
parentb4997d08902ed312d7504765014c34f4ea862534

build runner: hide repeated steps in the build summary


1 files changed, 53 insertions(+), 37 deletions(-)

lib/build_runner.zig+53-37
......@@ -350,6 +350,8 @@ fn runStepNames(
350350 var failure_count: usize = 0;
351351 var pending_count: usize = 0;
352352 var total_compile_errors: usize = 0;
353 var compile_error_steps: std.ArrayListUnmanaged(*Step) = .{};
354 defer compile_error_steps.deinit(gpa);
353355
354356 for (step_stack.keys()) |s| {
355357 switch (s.state) {
......@@ -369,7 +371,11 @@ fn runStepNames(
369371 .success => success_count += 1,
370372 .failure => {
371373 failure_count += 1;
372 total_compile_errors += s.result_error_bundle.errorMessageCount();
374 const compile_errors_len = s.result_error_bundle.errorMessageCount();
375 if (compile_errors_len > 0) {
376 total_compile_errors += compile_errors_len;
377 try compile_error_steps.append(gpa, s);
378 }
373379 },
374380 }
375381 }
......@@ -392,20 +398,22 @@ fn runStepNames(
392398 var print_node: PrintNode = .{ .parent = null };
393399 if (step_names.len == 0) {
394400 print_node.last = true;
395 printTreeStep(b, b.default_step, stderr, ttyconf, &print_node) catch {};
401 printTreeStep(b, b.default_step, stderr, ttyconf, &print_node, &step_stack) catch {};
396402 } else {
397403 for (step_names, 0..) |step_name, i| {
398404 const tls = b.top_level_steps.get(step_name).?;
399405 print_node.last = i + 1 == b.top_level_steps.count();
400 printTreeStep(b, &tls.step, stderr, ttyconf, &print_node) catch {};
406 printTreeStep(b, &tls.step, stderr, ttyconf, &print_node, &step_stack) catch {};
401407 }
402408 }
403409
404410 if (failure_count == 0) return cleanExit();
405411
406412 // Finally, render compile errors at the bottom of the terminal.
413 // We use a separate compile_error_steps array list because step_stack is destructively
414 // mutated in printTreeStep above.
407415 if (total_compile_errors > 0) {
408 for (step_stack.keys()) |s| {
416 for (compile_error_steps.items) |s| {
409417 if (s.result_error_bundle.errorMessageCount() > 0) {
410418 s.result_error_bundle.renderToStdErr(ttyconf);
411419 }
......@@ -442,7 +450,10 @@ fn printTreeStep(
442450 stderr: std.fs.File,
443451 ttyconf: std.debug.TTY.Config,
444452 parent_node: *PrintNode,
453 step_stack: *std.AutoArrayHashMapUnmanaged(*Step, void),
445454) !void {
455 const first = step_stack.swapRemove(s);
456 if (!first) try ttyconf.setColor(stderr, .Dim);
446457 try printPrefix(parent_node, stderr);
447458
448459 if (parent_node.parent != null) {
......@@ -456,43 +467,48 @@ fn printTreeStep(
456467 // TODO print the dep prefix too?
457468 try stderr.writeAll(s.name);
458469
459 switch (s.state) {
460 .precheck_unstarted => unreachable,
461 .precheck_started => unreachable,
462 .precheck_done => unreachable,
463 .running => unreachable,
470 if (first) {
471 switch (s.state) {
472 .precheck_unstarted => unreachable,
473 .precheck_started => unreachable,
474 .precheck_done => unreachable,
475 .running => unreachable,
464476
465 .dependency_failure => {
466 try ttyconf.setColor(stderr, .Dim);
467 try stderr.writeAll(" transitive failure\n");
468 try ttyconf.setColor(stderr, .Reset);
469 },
477 .dependency_failure => {
478 try ttyconf.setColor(stderr, .Dim);
479 try stderr.writeAll(" transitive failure\n");
480 try ttyconf.setColor(stderr, .Reset);
481 },
470482
471 .success => {
472 try ttyconf.setColor(stderr, .Green);
473 try stderr.writeAll(" success\n");
474 try ttyconf.setColor(stderr, .Reset);
475 },
483 .success => {
484 try ttyconf.setColor(stderr, .Green);
485 try stderr.writeAll(" success\n");
486 try ttyconf.setColor(stderr, .Reset);
487 },
476488
477 .failure => {
478 try ttyconf.setColor(stderr, .Red);
479 if (s.result_error_bundle.errorMessageCount() > 0) {
480 try stderr.writer().print(" {d} errors\n", .{
481 s.result_error_bundle.errorMessageCount(),
482 });
483 } else {
484 try stderr.writeAll(" failure\n");
485 }
486 try ttyconf.setColor(stderr, .Reset);
487 },
488 }
489 .failure => {
490 try ttyconf.setColor(stderr, .Red);
491 if (s.result_error_bundle.errorMessageCount() > 0) {
492 try stderr.writer().print(" {d} errors\n", .{
493 s.result_error_bundle.errorMessageCount(),
494 });
495 } else {
496 try stderr.writeAll(" failure\n");
497 }
498 try ttyconf.setColor(stderr, .Reset);
499 },
500 }
489501
490 for (s.dependencies.items, 0..) |dep, i| {
491 var print_node: PrintNode = .{
492 .parent = parent_node,
493 .last = i == s.dependencies.items.len - 1,
494 };
495 try printTreeStep(b, dep, stderr, ttyconf, &print_node);
502 for (s.dependencies.items, 0..) |dep, i| {
503 var print_node: PrintNode = .{
504 .parent = parent_node,
505 .last = i == s.dependencies.items.len - 1,
506 };
507 try printTreeStep(b, dep, stderr, ttyconf, &print_node, step_stack);
508 }
509 } else {
510 try stderr.writer().print(" ({d} repeated dependencies)\n", .{s.dependencies.items.len});
511 try ttyconf.setColor(stderr, .Reset);
496512 }
497513}
498514