authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-12-19 09:59:05-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-12-23 22:15:10-08:00
log2f30b0f44d5dbdb80362f181f35504965db733f9
tree7120cbf715bd14ea0ca4f7a87be06dee8250e612
parent406950f7566f7f220847ab2faa2c26914dcda257

std.Progress.start: handle cancelation from isTty

It's important not to swallow error.Canceled. We don't have recancel() yet but that will be a way to "rearm" cancelation after handling it so that it is not ignored.

1 files changed, 11 insertions(+), 4 deletions(-)

lib/std/Progress.zig+11-4
......@@ -497,10 +497,17 @@ pub fn start(io: Io, options: Options) Node {
497497 global_progress.terminal = stderr;
498498 if (stderr.enableAnsiEscapeCodes(io)) |_| {
499499 global_progress.terminal_mode = .ansi_escape_codes;
500 } else |_| if (is_windows and stderr.isTty(io)) {
501 global_progress.terminal_mode = TerminalMode{ .windows_api = .{
502 .code_page = windows.kernel32.GetConsoleOutputCP(),
503 } };
500 } else |_| if (is_windows) {
501 if (stderr.isTty(io)) {
502 global_progress.terminal_mode = TerminalMode{ .windows_api = .{
503 .code_page = windows.kernel32.GetConsoleOutputCP(),
504 } };
505 } else |err| switch (err) {
506 error.Canceled => {
507 // TODO: recancel here, or block cancelation for this function
508 return Node.none;
509 },
510 }
504511 }
505512
506513 if (global_progress.terminal_mode == .off) {