feat(cli): enhance --version output with component versions

This commit is contained in:
Nils Andreas Svee committed 2026-10-21 14:42:49 +07:00
1 parent 7d640793b6
commit 5481009fe3
9 files changed
+61 -14

No files matched your search

+1 -1
View File
@@ -43,7 +43,7 @@ doc = false
[features]
default = ["client", "server", "tui"]
client = ["dep:humantime", "dep:tokio", "dep:irtt-client", "irtt-client/ancillary", "irtt-client/tokio", "dep:irtt-proto", "dep:irtt-stats"]
server = ["dep:irtt-server", "dep:tokio"]
server = ["dep:irtt-server", "dep:irtt-proto", "dep:tokio"]
tui =["dep:humantime", "dep:tokio", "dep:futures-core", "dep:irtt-client", "irtt-client/ancillary", "irtt-client/tokio", "dep:irtt-proto", "dep:irtt-stats", "dep:ratatui", "dep:crossterm", "dep:chrono"]
[dependencies]
+1 -4
View File
@@ -55,10 +55,7 @@ pub fn dispatch_from_argv(argv: Vec<OsString>) -> Result<AppletDispatch, String>
};
match command {
"-V" | "--version" => Ok(AppletDispatch::Help(format!(
"irtt-rs {}",
env!("CARGO_PKG_VERSION")
))),
"-V" | "--version" => Ok(AppletDispatch::Help(crate::version::app())),
"-h" | "--help" => Ok(AppletDispatch::Help(dispatcher_help())),
"client" => Ok(AppletDispatch::Run {
applet: RequestedApplet::Client,
+5 -9
View File
@@ -89,11 +89,10 @@ fn with_shutdown_flag(
#[cfg(feature = "client")]
fn run_client_applet(argv: Vec<OsString>) -> Result<(), Box<dyn std::error::Error>> {
use clap::Parser;
let shutdown = crate::signal::install_async_signal_handler()
.map_err(|err| format!("failed to install signal handler: {err}"))?;
let args = crate::cmd::client::ClientArgs::parse_from(argv);
let args =
crate::version::parse::<crate::cmd::client::ClientArgs>(argv, crate::version::client);
tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()?
@@ -107,10 +106,9 @@ fn run_client_applet(_argv: Vec<OsString>) -> Result<(), Box<dyn std::error::Err
#[cfg(feature = "server")]
fn run_server_applet(argv: Vec<OsString>) -> Result<(), Box<dyn std::error::Error>> {
use clap::Parser;
with_shutdown_flag(|shutdown_requested| {
let args = crate::cmd::server::ServerArgs::parse_from(argv);
let args =
crate::version::parse::<crate::cmd::server::ServerArgs>(argv, crate::version::server);
crate::cmd::server::run_server(args, shutdown_requested)
})
}
@@ -122,11 +120,9 @@ fn run_server_applet(_argv: Vec<OsString>) -> Result<(), Box<dyn std::error::Err
#[cfg(feature = "tui")]
fn run_tui_applet(argv: Vec<OsString>) -> Result<(), Box<dyn std::error::Error>> {
use clap::Parser;
let shutdown = crate::signal::install_async_signal_handler()
.map_err(|err| format!("failed to install signal handler: {err}"))?;
let args = crate::cmd::tui::TuiArgs::parse_from(argv);
let args = crate::version::parse::<crate::cmd::tui::TuiArgs>(argv, crate::version::client);
tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()?
+2
View File
@@ -6,3 +6,5 @@ pub mod cmd;
pub mod entry;
pub mod shared;
pub mod signal;
mod version;
+40
View File
@@ -0,0 +1,40 @@
#[cfg(any(feature = "client", feature = "tui", feature = "server"))]
use std::ffi::OsString;
pub(crate) fn app() -> String {
clap::Command::new("irtt-rs")
.version(env!("CARGO_PKG_VERSION"))
.render_version()
}
// Preserve Clap's version banner and append the compiled component versions.
#[cfg(any(feature = "client", feature = "tui", feature = "server"))]
pub(crate) fn parse<T: clap::Parser>(argv: Vec<OsString>, report: fn() -> String) -> T {
match T::try_parse_from(argv) {
Ok(args) => args,
Err(err) if err.kind() == clap::error::ErrorKind::DisplayVersion => {
print!("{}{}", err.render().ansi(), report());
std::process::exit(0)
}
Err(err) => err.exit(),
}
}
#[cfg(any(feature = "client", feature = "tui"))]
pub(crate) fn client() -> String {
format!(
" client: {}\n stats: {}\n proto: {}\n",
irtt_client::VERSION,
irtt_stats::VERSION,
irtt_proto::VERSION,
)
}
#[cfg(feature = "server")]
pub(crate) fn server() -> String {
format!(
" server: {}\n proto: {}\n",
irtt_server::VERSION,
irtt_proto::VERSION,
)
}