Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
term/spinner: Only handle signals on Unix
Lorenz Leutgeb committed 9 months ago
commit d46d36ecee7cbfcbd100d6970266269af87f6f0e
parent 92d77f9ec373261d91a65e68c95baaaa9fc9b95e
2 files changed +17 -10
modified crates/radicle-term/Cargo.toml
@@ -15,7 +15,6 @@ default = ["git2"]
[dependencies]
anyhow = { workspace = true }
anstyle-query = "1.0.0"
-
crossbeam-channel = { workspace = true }
crossterm = "0.29.0"
inquire = { version = "0.7.4", default-features = false, features = ["crossterm", "editor"] }
libc = { workspace = true }
@@ -25,6 +24,9 @@ unicode-display-width = "0.3.0"
unicode-segmentation = "1.7.1"
zeroize = { workspace = true }
git2 = { workspace = true, features = ["vendored-libgit2"], optional = true }
+

+
[target.'cfg(unix)'.dependencies]
+
crossbeam-channel = { workspace = true }
radicle-signals = { workspace = true }

[dev-dependencies]
modified crates/radicle-term/src/spinner.rs
@@ -3,11 +3,6 @@ use std::mem::ManuallyDrop;
use std::sync::{Arc, Mutex};
use std::{fmt, io, thread, time};

-
use crossbeam_channel as chan;
-

-
use radicle_signals as signals;
-
use signals::Signal;
-

use crate::io::{ERROR_PREFIX, WARNING_PREFIX};
use crate::Paint;

@@ -136,8 +131,13 @@ pub fn spinner_to(
) -> Spinner {
    let message = message.to_string();
    let progress = Arc::new(Mutex::new(Progress::new(Paint::new(message))));
-
    let (sig_tx, sig_rx) = chan::unbounded();
-
    let sig_result = signals::install(sig_tx);
+

+
    #[cfg(unix)]
+
    let (sig_tx, sig_rx) = crossbeam_channel::unbounded();
+

+
    #[cfg(unix)]
+
    let sig_result = radicle_signals::install(sig_tx);
+

    let handle = thread::Builder::new()
        .name(String::from("spinner"))
        .spawn({
@@ -151,9 +151,13 @@ pub fn spinner_to(
                        break;
                    };
                    // If were unable to install handles, skip signal processing entirely.
+
                    #[cfg(unix)]
                    if sig_result.is_ok() {
                        match sig_rx.try_recv() {
-
                            Ok(sig) if sig == Signal::Interrupt || sig == Signal::Terminate => {
+
                            Ok(sig)
+
                                if sig == radicle_signals::Signal::Interrupt
+
                                    || sig == radicle_signals::Signal::Terminate =>
+
                            {
                                write!(animation, "\r{CLEAR_UNTIL_NEWLINE}").ok();
                                writeln!(
                                    completion,
@@ -225,8 +229,9 @@ pub fn spinner_to(

                write!(animation, "{}", crossterm::cursor::Show).ok();

+
                #[cfg(unix)]
                if sig_result.is_ok() {
-
                    let _ = signals::uninstall();
+
                    let _ = radicle_signals::uninstall();
                }
            }
        })