fix(repl): Prevent panic on broken pipe (#21945)

This commit is contained in:
melbourne2991 2024-08-20 10:21:12 +10:00 committed by GitHub
parent 1c4db2aca9
commit 0eba180fdb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 43 additions and 5 deletions

View file

@ -1,5 +1,8 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
use std::io;
use std::io::Write;
use std::sync::Arc;
use crate::args::CliOptions;
@ -241,15 +244,24 @@ pub async fn run(
// Doing this manually, instead of using `log::info!` because these messages
// are supposed to go to stdout, not stderr.
// Using writeln, because println panics in certain cases
// (eg: broken pipes - https://github.com/denoland/deno/issues/21861)
if !cli_options.is_quiet() {
println!("Deno {}", crate::version::DENO_VERSION_INFO.deno);
println!("exit using ctrl+d, ctrl+c, or close()");
let mut handle = io::stdout().lock();
writeln!(handle, "Deno {}", crate::version::DENO_VERSION_INFO.deno)?;
writeln!(handle, "exit using ctrl+d, ctrl+c, or close()")?;
if repl_flags.is_default_command {
println!(
writeln!(
handle,
"{}",
colors::yellow("REPL is running with all permissions allowed.")
);
println!("To specify permissions, run `deno repl` with allow flags.")
)?;
writeln!(
handle,
"To specify permissions, run `deno repl` with allow flags."
)?;
}
}