diff --git a/Cargo.lock b/Cargo.lock index cf364747..bee8ab7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -48,13 +48,12 @@ dependencies = [ [[package]] name = "async-broadcast" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d26004fe83b2d1cd3a97609b21e39f9a31535822210fe83205d2ce48866ea61" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" dependencies = [ "event-listener", "futures-core", - "parking_lot", ] [[package]] @@ -82,6 +81,18 @@ dependencies = [ "slab", ] +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock", + "autocfg", + "blocking", + "futures-lite", +] + [[package]] name = "async-io" version = "1.13.0" @@ -112,14 +123,32 @@ dependencies = [ ] [[package]] -name = "async-recursion" -version = "0.3.2" +name = "async-process" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2" +checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" +dependencies = [ + "async-io", + "async-lock", + "autocfg", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", + "signal-hook", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-recursion" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -139,6 +168,12 @@ dependencies = [ "syn 2.0.15", ] +[[package]] +name = "atomic-waker" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" + [[package]] name = "atty" version = "0.2.14" @@ -189,6 +224,30 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "atomic-waker", + "fastrand", + "futures-lite", + "log", +] + [[package]] name = "bumpalo" version = "3.12.1" @@ -357,6 +416,15 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +[[package]] +name = "cpufeatures" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.3.2" @@ -375,6 +443,16 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "cxx" version = "1.0.94" @@ -430,6 +508,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "dirs" version = "4.0.0" @@ -717,6 +805,16 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.9" @@ -1023,16 +1121,6 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c" -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - [[package]] name = "log" version = "0.4.17" @@ -1088,6 +1176,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + [[package]] name = "merge" version = "0.1.0" @@ -1146,19 +1243,6 @@ dependencies = [ "windows-sys 0.45.0", ] -[[package]] -name = "nix" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" -dependencies = [ - "bitflags", - "cc", - "cfg-if", - "libc", - "memoffset", -] - [[package]] name = "nix" version = "0.24.3" @@ -1168,21 +1252,33 @@ dependencies = [ "bitflags", "cfg-if", "libc", - "memoffset", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +dependencies = [ + "bitflags", + "cfg-if", + "libc", + "memoffset 0.7.1", + "static_assertions", ] [[package]] name = "notify-rust" -version = "4.5.10" +version = "4.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368e89ea58df747ce88be669ae44e79783c1d30bfd540ad0fc520b3f41f0b3b0" +checksum = "2bfa211d18e360f08e36c364308f394b5eb23a6629150690e109a916dc6f610e" dependencies = [ + "log", "mac-notification-sys", "serde", "tauri-winrt-notification", "zbus", - "zvariant", - "zvariant_derive", ] [[package]] @@ -1286,9 +1382,9 @@ dependencies = [ [[package]] name = "ordered-stream" -version = "0.0.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44630c059eacfd6e08bdaa51b1db2ce33119caa4ddc1235e923109aa5f25ccb1" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" dependencies = [ "futures-core", "pin-project-lite", @@ -1318,29 +1414,6 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.45.0", -] - [[package]] name = "parselnk" version = "0.1.1" @@ -1690,12 +1763,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - [[package]] name = "scratch" version = "1.0.5" @@ -1795,19 +1862,15 @@ dependencies = [ [[package]] name = "sha1" -version = "0.6.1" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ - "sha1_smol", + "cfg-if", + "cpufeatures", + "digest", ] -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - [[package]] name = "sharded-slab" version = "0.1.4" @@ -1832,6 +1895,16 @@ dependencies = [ "dirs", ] +[[package]] +name = "signal-hook" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +dependencies = [ + "libc", + "signal-hook-registry", +] + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -2279,6 +2352,12 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + [[package]] name = "uds_windows" version = "1.0.2" @@ -2732,9 +2811,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winnow" -version = "0.4.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5617da7e1f97bf363947d767b91aaf3c2bbc19db7fda9c65af1278713d58e0a2" +checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" dependencies = [ "memchr", ] @@ -2758,30 +2837,39 @@ dependencies = [ ] [[package]] -name = "zbus" -version = "2.3.2" +name = "xdg-home" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8f1a037b2c4a67d9654dc7bdfa8ff2e80555bbefdd3c1833c1d1b27c963a6b" +checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" +dependencies = [ + "nix 0.26.2", + "winapi", +] + +[[package]] +name = "zbus" +version = "3.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c3d77c9966c28321f1907f0b6c5a5561189d1f7311eea6d94180c6be9daab29" dependencies = [ "async-broadcast", - "async-channel", "async-executor", + "async-fs", "async-io", "async-lock", + "async-process", "async-recursion", "async-task", "async-trait", "byteorder", "derivative", - "dirs", "enumflags2", "event-listener", "futures-core", "futures-sink", "futures-util", "hex", - "lazy_static", - "nix 0.23.2", + "nix 0.26.2", "once_cell", "ordered-stream", "rand", @@ -2792,6 +2880,7 @@ dependencies = [ "tracing", "uds_windows", "winapi", + "xdg-home", "zbus_macros", "zbus_names", "zvariant", @@ -2799,15 +2888,17 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "2.3.2" +version = "3.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8fb5186d1c87ae88cf234974c240671238b4a679158ad3b94ec465237349a6" +checksum = "f6e341d12edaff644e539ccbbf7f161601294c9a84ed3d7e015da33155b435af" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "regex", "syn 1.0.109", + "winnow", + "zvariant_utils", ] [[package]] @@ -2836,9 +2927,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe4914a985446d6fd287019b5fceccce38303d71407d9e6e711d44954a05d8" +checksum = "622cc473f10cef1b0d73b7b34a266be30ebdcfaea40ec297dd8cbda088f9f93c" dependencies = [ "byteorder", "enumflags2", @@ -2850,9 +2941,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34c20260af4b28b3275d6676c7e2a6be0d4332e8e0aba4616d34007fd84e462a" +checksum = "5d9c1b57352c25b778257c661f3c4744b7cefb7fc09dd46909a153cce7773da2" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2863,9 +2954,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index c7c7d94c..9a6f8cc8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -49,9 +49,7 @@ tracing = { version = "~0.1", features = ["attributes", "log"] } tracing-subscriber = { version = "~0.3", features = ["env-filter", "time"] } merge = "0.1.0" regex-split = "0.1.0" - -[target.'cfg(target_os = "macos")'.dependencies] -notify-rust = "~4.5" +notify-rust = "4.8.0" [package.metadata.generate-rpm] assets = [{source = "target/release/topgrade", dest="/usr/bin/topgrade"}] diff --git a/config.example.toml b/config.example.toml index 5f311b68..1641b15b 100644 --- a/config.example.toml +++ b/config.example.toml @@ -54,9 +54,6 @@ # Skip sending a notification at the end of a run #skip_notify = true -# Skip the preamble displayed when topgrade is run -#display_preamble = false - # Whether to self update (this is ignored if the binary has been built without self update support, available also via setting the environment variable TOPGRADE_NO_SELF_UPGRADE) #no_self_update = true diff --git a/src/config.rs b/src/config.rs index f37c931c..5718bd06 100644 --- a/src/config.rs +++ b/src/config.rs @@ -397,8 +397,6 @@ pub struct Misc { display_time: Option, - display_preamble: Option, - assume_yes: Option, #[merge(strategy = crate::utils::merge_strategies::string_append_opt)] @@ -787,7 +785,7 @@ pub struct CommandLineArgs { /// Tracing filter directives. /// /// See: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/struct.EnvFilter.html - #[clap(long, default_value = "info")] + #[clap(long, default_value = "warn")] pub log_filter: String, /// Print completion script for the given shell and exit @@ -1489,14 +1487,6 @@ impl Config { .unwrap_or(true) } - pub fn display_preamble(&self) -> bool { - self.config_file - .misc - .as_ref() - .and_then(|misc| misc.display_preamble) - .unwrap_or(true) - } - pub fn should_run_custom_command(&self, name: &str) -> bool { if self.opt.custom_commands.is_empty() { return true; diff --git a/src/main.rs b/src/main.rs index 7c628330..62bfc95c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -94,16 +94,6 @@ fn run() -> Result<()> { debug!("Binary path: {:?}", std::env::current_exe()); debug!("Self Update: {:?}", cfg!(feature = "self-update")); - #[cfg(target_os = "linux")] - { - if config.display_preamble() && terminal::supports_notify_send() && !config.skip_notify() { - print_warning("Due to a design issue with notify-send it could be that topgrade hangs when it's finished. -If this is the case on your system add the --skip-notify flag to the topgrade command or set skip_notify = true in the config file. -If you don't want this message to appear any longer set display_preamble = false in the config file. -For more information about this issue see https://askubuntu.com/questions/110969/notify-send-ignores-timeout and https://github.com/topgrade-rs/topgrade/issues/288."); - } - } - if config.run_in_tmux() && env::var("TOPGRADE_INSIDE_TMUX").is_err() { #[cfg(unix)] { diff --git a/src/terminal.rs b/src/terminal.rs index 20f95e79..04df3e06 100644 --- a/src/terminal.rs +++ b/src/terminal.rs @@ -1,8 +1,6 @@ use std::cmp::{max, min}; use std::env; use std::io::{self, Write}; -#[cfg(target_os = "linux")] -use std::path::PathBuf; use std::process::Command; use std::sync::Mutex; use std::time::Duration; @@ -12,7 +10,6 @@ use color_eyre::eyre; use color_eyre::eyre::Context; use console::{style, Key, Term}; use lazy_static::lazy_static; -#[cfg(target_os = "macos")] use notify_rust::{Notification, Timeout}; use tracing::{debug, error}; #[cfg(windows)] @@ -20,10 +17,7 @@ use which_crate::which; use crate::command::CommandExt; use crate::report::StepResult; -#[cfg(target_os = "linux")] -use crate::terminal; -#[cfg(target_os = "linux")] -use crate::utils::which; + lazy_static! { static ref TERMINAL: Mutex = Mutex::new(Terminal::new()); } @@ -49,8 +43,6 @@ struct Terminal { set_title: bool, display_time: bool, desktop_notification: bool, - #[cfg(target_os = "linux")] - notify_send: Option, } impl Terminal { @@ -65,8 +57,6 @@ impl Terminal { set_title: true, display_time: true, desktop_notification: false, - #[cfg(target_os = "linux")] - notify_send: which("notify-send"), } } @@ -82,35 +72,18 @@ impl Terminal { self.display_time = display_time } - #[allow(unused_variables)] fn notify_desktop>(&self, message: P, timeout: Option) { debug!("Desktop notification: {}", message.as_ref()); - cfg_if::cfg_if! { - if #[cfg(target_os = "macos")] { - let mut notification = Notification::new(); - notification.summary("Topgrade") - .body(message.as_ref()) - .appname("topgrade"); + let mut notification = Notification::new(); + notification + .summary("Topgrade") + .body(message.as_ref()) + .appname("topgrade"); - if let Some(timeout) = timeout { - notification.timeout(Timeout::Milliseconds(timeout.as_millis() as u32)); - } - notification.show().ok(); - } else if #[cfg(target_os = "linux")] { - if let Some(ns) = self.notify_send.as_ref() { - let mut command = Command::new(ns); - if let Some(timeout) = timeout { - command.arg("-t"); - command.arg(format!("{}", timeout.as_millis())); - } - command.args(["-a", "Topgrade", "Topgrade"]); - command.arg(message.as_ref()); - if let Err(err) = command.output_checked() { - terminal::print_warning("Sending notification failed with {err:?}"); - } - } - } + if let Some(timeout) = timeout { + notification.timeout(Timeout::Milliseconds(timeout.as_millis() as u32)); } + notification.show().ok(); } fn print_separator>(&mut self, message: P) { @@ -345,8 +318,3 @@ pub fn notify_desktop>(message: P, timeout: Option) { pub fn display_time(display_time: bool) { TERMINAL.lock().unwrap().display_time(display_time); } - -#[cfg(target_os = "linux")] -pub fn supports_notify_send() -> bool { - TERMINAL.lock().unwrap().notify_send.is_some() -}