mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-18 10:07:28 +00:00
cli: use is_tty()
from crossterm
crate instead of atty
The `atty` crate seems unmaintained. There's https://rustsec.org/advisories/RUSTSEC-2021-0145 filed against it, which `cargo-deny` complains about. A fix for that has been open for well over a year without being fixed (https://github.com/softprops/atty/pull/51). It turns out the functionality is also available via the `crossterm` crate (thanks, @yuja), which we already depend on. Since we also depend on `atty` via `clap`, I also added an exception to the `cargo-deny` config.
This commit is contained in:
parent
94815a7cb5
commit
3e0f6ef2b9
4 changed files with 6 additions and 7 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -716,7 +716,6 @@ name = "jujutsu"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
"atty",
|
|
||||||
"chrono",
|
"chrono",
|
||||||
"clap 4.0.26",
|
"clap 4.0.26",
|
||||||
"clap_complete",
|
"clap_complete",
|
||||||
|
|
|
@ -34,7 +34,6 @@ harness = false
|
||||||
members = ["lib"]
|
members = ["lib"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
atty = "0.2.14"
|
|
||||||
chrono = { version = "0.4.23", default-features = false, features = ["std", "clock"] }
|
chrono = { version = "0.4.23", default-features = false, features = ["std", "clock"] }
|
||||||
clap = { version = "4.0.26", features = ["derive", "deprecated"] }
|
clap = { version = "4.0.26", features = ["derive", "deprecated"] }
|
||||||
clap_complete = "4.0.5"
|
clap_complete = "4.0.5"
|
||||||
|
|
|
@ -51,6 +51,7 @@ notice = "warn"
|
||||||
# output a note when they are encountered.
|
# output a note when they are encountered.
|
||||||
ignore = [
|
ignore = [
|
||||||
#"RUSTSEC-0000-0000",
|
#"RUSTSEC-0000-0000",
|
||||||
|
"RUSTSEC-2021-0145",
|
||||||
]
|
]
|
||||||
# Threshold for security vulnerabilities, any vulnerability with a CVSS score
|
# Threshold for security vulnerabilities, any vulnerability with a CVSS score
|
||||||
# lower than the range specified will be ignored. Note that ignored advisories
|
# lower than the range specified will be ignored. Note that ignored advisories
|
||||||
|
|
10
src/ui.rs
10
src/ui.rs
|
@ -17,7 +17,7 @@ use std::path::{Path, PathBuf};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::{fmt, io};
|
use std::{fmt, io};
|
||||||
|
|
||||||
use atty::Stream;
|
use crossterm::tty::IsTty;
|
||||||
use jujutsu_lib::settings::UserSettings;
|
use jujutsu_lib::settings::UserSettings;
|
||||||
|
|
||||||
use crate::formatter::{Formatter, FormatterFactory};
|
use crate::formatter::{Formatter, FormatterFactory};
|
||||||
|
@ -80,7 +80,7 @@ fn use_color(choice: ColorChoice) -> bool {
|
||||||
match choice {
|
match choice {
|
||||||
ColorChoice::Always => true,
|
ColorChoice::Always => true,
|
||||||
ColorChoice::Never => false,
|
ColorChoice::Never => false,
|
||||||
ColorChoice::Auto => atty::is(Stream::Stdout),
|
ColorChoice::Auto => io::stdout().is_tty(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ impl Ui {
|
||||||
/// Whether continuous feedback should be displayed for long-running
|
/// Whether continuous feedback should be displayed for long-running
|
||||||
/// operations
|
/// operations
|
||||||
pub fn use_progress_indicator(&self) -> bool {
|
pub fn use_progress_indicator(&self) -> bool {
|
||||||
self.settings().use_progress_indicator() && atty::is(Stream::Stdout)
|
self.settings().use_progress_indicator() && io::stdout().is_tty()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write(&mut self, text: &str) -> io::Result<()> {
|
pub fn write(&mut self, text: &str) -> io::Result<()> {
|
||||||
|
@ -208,7 +208,7 @@ impl Ui {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn prompt(&mut self, prompt: &str) -> io::Result<String> {
|
pub fn prompt(&mut self, prompt: &str) -> io::Result<String> {
|
||||||
if !atty::is(Stream::Stdout) {
|
if !io::stdout().is_tty() {
|
||||||
return Err(io::Error::new(
|
return Err(io::Error::new(
|
||||||
io::ErrorKind::Unsupported,
|
io::ErrorKind::Unsupported,
|
||||||
"Cannot prompt for input since the output is not connected to a terminal",
|
"Cannot prompt for input since the output is not connected to a terminal",
|
||||||
|
@ -222,7 +222,7 @@ impl Ui {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn prompt_password(&mut self, prompt: &str) -> io::Result<String> {
|
pub fn prompt_password(&mut self, prompt: &str) -> io::Result<String> {
|
||||||
if !atty::is(Stream::Stdout) {
|
if !io::stdout().is_tty() {
|
||||||
return Err(io::Error::new(
|
return Err(io::Error::new(
|
||||||
io::ErrorKind::Unsupported,
|
io::ErrorKind::Unsupported,
|
||||||
"Cannot prompt for input since the output is not connected to a terminal",
|
"Cannot prompt for input since the output is not connected to a terminal",
|
||||||
|
|
Loading…
Reference in a new issue