From 27d103ef7ec0a1939c18dc5a05d54418b9211573 Mon Sep 17 00:00:00 2001 From: andylokandy Date: Tue, 28 Apr 2026 23:43:24 +0800 Subject: [PATCH 1/7] feat: slash command for changing connection --- scopeql/src/client/mod.rs | 4 +- scopeql/src/config.rs | 32 +++++--- scopeql/src/repl/command.rs | 18 ++++- scopeql/src/repl/entrypoint.rs | 130 ++++++++++++++++++++++++++------- scopeql/src/repl/prompt.rs | 4 + 5 files changed, 142 insertions(+), 46 deletions(-) diff --git a/scopeql/src/client/mod.rs b/scopeql/src/client/mod.rs index ed0b555..76299d1 100644 --- a/scopeql/src/client/mod.rs +++ b/scopeql/src/client/mod.rs @@ -32,7 +32,7 @@ use crate::client::protocol::StatementRequest; use crate::client::protocol::StatementRequestParams; use crate::client::protocol::StatementStatus; use crate::command::OutputFormat; -use crate::config::ConnectionSpec; +use crate::config::ConnectionConfig; use crate::output::format_result_set; mod connection; @@ -45,7 +45,7 @@ pub struct ScopeQLClient { } impl ScopeQLClient { - pub fn from_connection(connection: &ConnectionSpec) -> Self { + pub fn from_connection(connection: &ConnectionConfig) -> Self { let client = reqwest::ClientBuilder::new() .no_proxy() .build() diff --git a/scopeql/src/config.rs b/scopeql/src/config.rs index 4250880..f49392e 100644 --- a/scopeql/src/config.rs +++ b/scopeql/src/config.rs @@ -136,15 +136,23 @@ pub struct Config { #[serde(default)] #[serde(skip_serializing_if = "BTreeMap::is_empty")] - connections: BTreeMap, + connections: BTreeMap, } impl Config { - pub fn get_connection(&self, name: &str) -> Option<&ConnectionSpec> { + pub fn default_connection_name(&self) -> &str { + &self.default_connection + } + + pub fn connection_names(&self) -> impl Iterator { + self.connections.keys().map(String::as_str) + } + + pub fn get_connection(&self, name: &str) -> Option<&ConnectionConfig> { self.connections.get(name) } - pub fn get_default_connection(&self) -> Option<&ConnectionSpec> { + pub fn get_default_connection(&self) -> Option<&ConnectionConfig> { self.get_connection(&self.default_connection) } } @@ -155,7 +163,7 @@ impl Default for Config { default_connection: "default".to_string(), connections: BTreeMap::from([( "default".to_string(), - ConnectionSpec { + ConnectionConfig { endpoint: "http://127.0.0.1:6543".to_string(), api_key: None, headers: vec![], @@ -166,7 +174,7 @@ impl Default for Config { } #[derive(Serialize, Deserialize, Debug)] -pub struct ConnectionSpec { +pub struct ConnectionConfig { endpoint: String, #[serde(default)] @@ -178,7 +186,7 @@ pub struct ConnectionSpec { headers: Vec, } -impl ConnectionSpec { +impl ConnectionConfig { pub fn endpoint(&self) -> &str { &self.endpoint } @@ -200,7 +208,7 @@ mod tests { #[test] fn connection_api_key_ignores_empty_string() { - let connection = ConnectionSpec { + let connection = ConnectionConfig { endpoint: "http://127.0.0.1:6543".to_string(), api_key: Some(String::new()), headers: vec![], @@ -225,7 +233,7 @@ api_key = "test-api-key" assert_eq!( config .get_default_connection() - .and_then(ConnectionSpec::api_key), + .and_then(ConnectionConfig::api_key), Some("test-api-key") ); } @@ -246,7 +254,7 @@ headers = ["X-Tenant: acme"] assert_eq!( config .get_default_connection() - .map(ConnectionSpec::headers) + .map(ConnectionConfig::headers) .unwrap_or_default(), ["X-Tenant: acme"] ); @@ -269,7 +277,7 @@ headers = ["X-Tenant: acme"] assert_eq!( config .get_default_connection() - .and_then(ConnectionSpec::api_key), + .and_then(ConnectionConfig::api_key), Some("test-api-key") ); } @@ -291,7 +299,7 @@ headers = ["X-Tenant: acme"] assert_eq!( config .get_default_connection() - .map(ConnectionSpec::headers) + .map(ConnectionConfig::headers) .unwrap_or_default(), ["X-Tenant: acme"] ); @@ -314,7 +322,7 @@ headers = ["X-Tenant: acme"] assert_eq!( config .get_default_connection() - .map(ConnectionSpec::headers) + .map(ConnectionConfig::headers) .unwrap_or_default(), ["X-Tenant: acme", "X-Trace: demo"] ); diff --git a/scopeql/src/repl/command.rs b/scopeql/src/repl/command.rs index 23378ee..289e5a9 100644 --- a/scopeql/src/repl/command.rs +++ b/scopeql/src/repl/command.rs @@ -28,20 +28,30 @@ pub struct ReplCommand { #[derive(Debug, Subcommand)] pub enum ReplSubCommand { - /// Cancel the statement with the given ID. - #[command(name = "/cancel")] - Cancel(CommandCancel), + /// Display or switch connection profile. + #[command(name = "/connection")] + Connection(CommandConnection), /// Display or set output format. #[command(name = "/format")] Format(CommandFormat), /// Display or set the timing display mode. #[command(name = "/timer")] Timer(CommandTimer), + /// Cancel the statement with the given ID. + #[command(name = "/cancel")] + Cancel(CommandCancel), /// Print help. - #[command(name = "/help", alias = "/?")] + #[command(name = "/help")] Help, } +#[derive(Debug, Parser)] +pub struct CommandConnection { + /// The connection name to use. + #[arg(value_name = "NAME")] + pub name: String, +} + #[derive(Debug, Parser)] pub struct CommandFormat { /// The output format to use; if not specified, show the current format. diff --git a/scopeql/src/repl/entrypoint.rs b/scopeql/src/repl/entrypoint.rs index ac16bd0..031e48f 100644 --- a/scopeql/src/repl/entrypoint.rs +++ b/scopeql/src/repl/entrypoint.rs @@ -48,6 +48,12 @@ use crate::repl::prompt::CommandLinePrompt; use crate::repl::validate::ScopeQLValidator; use crate::tokenizer::tokenize; +// TODO: This is a workaround for reedline's Ctrl-C handling, which clears the +// buffer before bubbling up Signal::CtrlC and prevents us from deciding whether +// to clear or exit based on the prompt contents. +const CTRL_C_PROMPT_COMMAND: &str = "\0scopeql:prompt-ctrl-c\0"; +const CTRL_D_PROMPT_COMMAND: &str = "\0scopeql:prompt-ctrl-d\0"; + fn make_file_history() -> Option { let Some(home_dir) = dirs::home_dir() else { eprintln!("cannot get home directory; history disabled"); @@ -64,21 +70,53 @@ fn make_file_history() -> Option { } } +pub struct ReplState<'a> { + pub config: &'a Config, + pub connection_name: String, + pub client: ScopeQLClient, + pub prompt: CommandLinePrompt, + pub output_format: OutputFormat, + pub show_timer: bool, +} + +impl<'a> ReplState<'a> { + fn new(config: &'a Config) -> Self { + let connection_name = config.default_connection_name().to_owned(); + let connection = config + .get_connection(&connection_name) + .expect("no default connection in config"); + + Self { + config, + connection_name, + client: ScopeQLClient::from_connection(connection), + prompt: CommandLinePrompt::new(connection.endpoint().to_string()), + output_format: OutputFormat::Table, + show_timer: true, + } + } + + fn switch_connection(&mut self, name: String) -> Result<(), String> { + let Some(connection) = self.config.get_connection(&name) else { + let profiles = self + .config + .connection_names() + .collect::>() + .join(", "); + return Err(format!( + "unknown connection profile {name:?}; available profiles: {profiles}" + )); + }; + + self.client = ScopeQLClient::from_connection(connection); + self.prompt = CommandLinePrompt::new(connection.endpoint().to_string()); + self.connection_name = name; + Ok(()) + } +} + pub fn entrypoint(config: &Config) { - let connection = config - .get_default_connection() - .expect("no default connection in config"); - let endpoint = connection.endpoint().to_owned(); - let mut output_format = OutputFormat::Table; - let mut show_timer = true; - - let (client, prompt) = if endpoint.is_empty() { - eprintln!("error: endpoint is empty"); - return; - } else { - let client = ScopeQLClient::from_connection(connection); - (client, CommandLinePrompt::new(endpoint)) - }; + let mut repl = ReplState::new(config); let mut keybindings = default_emacs_keybindings(); keybindings.add_binding( @@ -86,10 +124,20 @@ pub fn entrypoint(config: &Config) { KeyCode::Tab, ReedlineEvent::HistoryHintComplete, ); + keybindings.add_binding( + KeyModifiers::CONTROL, + KeyCode::Char('c'), + ReedlineEvent::ExecuteHostCommand(CTRL_C_PROMPT_COMMAND.to_owned()), + ); + keybindings.add_binding( + KeyModifiers::CONTROL, + KeyCode::Char('d'), + ReedlineEvent::ExecuteHostCommand(CTRL_D_PROMPT_COMMAND.to_owned()), + ); let hinter = DefaultHinter::default().with_style(Style::new().fg(Color::DarkGray)); - let mut state = Reedline::create() + let mut line_editor = Reedline::create() .use_bracketed_paste(true) .with_validator(Box::new(ScopeQLValidator)) .with_highlighter(Box::new(ScopeQLHighlighter)) @@ -97,15 +145,28 @@ pub fn entrypoint(config: &Config) { .with_edit_mode(Box::new(Emacs::new(keybindings))); if let Some(history) = make_file_history() { - state = state.with_history(Box::new(history)); + line_editor = line_editor.with_history(Box::new(history)); } loop { - let input = state.read_line(&prompt).expect("failed to read next line"); + let input = line_editor + .read_line(&repl.prompt) + .expect("failed to read next line"); let input = match input { + Signal::Success(input) + if input == CTRL_C_PROMPT_COMMAND || input == CTRL_D_PROMPT_COMMAND => + { + if line_editor.current_buffer_contents().is_empty() { + println!(); + break; + } else { + line_editor.run_edit_commands(&[EditCommand::Clear]); + continue; + } + } Signal::Success(input) => input, Signal::CtrlC | Signal::CtrlD | Signal::ExternalBreak(_) | _ => { - println!("Exit"); + println!(); break; } }; @@ -135,26 +196,37 @@ pub fn entrypoint(config: &Config) { }; match cmd.cmd { - ReplSubCommand::Cancel(cancel) => cancel.run(&client), + ReplSubCommand::Connection(connection) => { + if let Err(err) = repl.switch_connection(connection.name) { + eprintln!("error: {err}"); + continue; + } + println!( + "Connection is set to {} ({})", + repl.connection_name, + repl.prompt.endpoint() + ); + } ReplSubCommand::Format(format) => { if let Some(format) = format.format { - output_format = format; + repl.output_format = format; } - println!("output format: {}", output_format.as_str()); + println!("Output format is set to {}", repl.output_format.as_str()); } ReplSubCommand::Timer(timer) => match timer.mode { None => { - println!("timer: {}", if show_timer { "on" } else { "off" }); + println!("Timer is {}", if repl.show_timer { "on" } else { "off" }); } Some(TimerMode::On) => { - show_timer = true; - println!("timer: on"); + repl.show_timer = true; + println!("Timer is set to on"); } Some(TimerMode::Off) => { - show_timer = false; - println!("timer: off"); + repl.show_timer = false; + println!("Timer is set to off"); } }, + ReplSubCommand::Cancel(cancel) => cancel.run(&repl.client), ReplSubCommand::Help => { let cmd = ReplCommand::command(); @@ -240,9 +312,11 @@ pub fn entrypoint(config: &Config) { } }); + let client = &repl.client; + let output_format = repl.output_format; + let show_timer = repl.show_timer; let output = global::rt().block_on({ let pb = pb.clone(); - let client = &client; async move { let fut = client.execute_statement( statement_id, @@ -287,7 +361,7 @@ pub fn entrypoint(config: &Config) { } } - state.run_edit_commands(&[EditCommand::InsertString( + line_editor.run_edit_commands(&[EditCommand::InsertString( outstanding.trim_start().to_string(), )]); } diff --git a/scopeql/src/repl/prompt.rs b/scopeql/src/repl/prompt.rs index e23809f..77f3ae4 100644 --- a/scopeql/src/repl/prompt.rs +++ b/scopeql/src/repl/prompt.rs @@ -29,6 +29,10 @@ impl CommandLinePrompt { Self { endpoint } } + pub fn endpoint(&self) -> &str { + &self.endpoint + } + fn prompt_len(&self) -> usize { "scopeql[]".len() + self.endpoint.len() } From 3545d316c6d24a47cca4ab653e8f8f4aabc8c119 Mon Sep 17 00:00:00 2001 From: andylokandy Date: Wed, 29 Apr 2026 01:20:09 +0800 Subject: [PATCH 2/7] statusbar --- scopeql/src/repl/command.rs | 14 ++-- scopeql/src/repl/entrypoint.rs | 89 +++++++++++++++++----- scopeql/src/repl/prompt.rs | 134 ++++++++++++++++++++++++++++++--- 3 files changed, 204 insertions(+), 33 deletions(-) diff --git a/scopeql/src/repl/command.rs b/scopeql/src/repl/command.rs index 289e5a9..c5c8e31 100644 --- a/scopeql/src/repl/command.rs +++ b/scopeql/src/repl/command.rs @@ -28,13 +28,13 @@ pub struct ReplCommand { #[derive(Debug, Subcommand)] pub enum ReplSubCommand { - /// Display or switch connection profile. + /// Switch connection profile. #[command(name = "/connection")] Connection(CommandConnection), - /// Display or set output format. + /// Set output format. #[command(name = "/format")] Format(CommandFormat), - /// Display or set the timing display mode. + /// Enable or disable timing display. #[command(name = "/timer")] Timer(CommandTimer), /// Cancel the statement with the given ID. @@ -54,16 +54,16 @@ pub struct CommandConnection { #[derive(Debug, Parser)] pub struct CommandFormat { - /// The output format to use; if not specified, show the current format. + /// The output format to use. #[arg(value_enum, value_name = "FORMAT")] - pub format: Option, + pub format: OutputFormat, } #[derive(Debug, Parser)] pub struct CommandTimer { - /// Enable or disable timing display; if not specified, show the current mode. + /// Enable or disable timing display. #[arg(value_enum)] - pub mode: Option, + pub mode: TimerMode, } #[derive(Debug, Clone, Copy, clap::ValueEnum)] diff --git a/scopeql/src/repl/entrypoint.rs b/scopeql/src/repl/entrypoint.rs index 031e48f..a71f1db 100644 --- a/scopeql/src/repl/entrypoint.rs +++ b/scopeql/src/repl/entrypoint.rs @@ -14,6 +14,7 @@ use std::fmt::Write; use std::sync::Arc; +use std::sync::Mutex; use std::time::Duration; use clap::CommandFactory; @@ -45,6 +46,8 @@ use crate::repl::command::TimerMode; use crate::repl::highlight::ScopeQLHighlighter; use crate::repl::lexer; use crate::repl::prompt::CommandLinePrompt; +use crate::repl::prompt::PromptRenderState; +use crate::repl::prompt::StatusHinter; use crate::repl::validate::ScopeQLValidator; use crate::tokenizer::tokenize; @@ -70,11 +73,27 @@ fn make_file_history() -> Option { } } +fn prompt_status_line( + connection_name: &str, + endpoint: &str, + output_format: OutputFormat, + show_timer: bool, +) -> String { + format!( + "{} · {} · {} · timer {}", + connection_name, + endpoint, + output_format.as_str(), + if show_timer { "on" } else { "off" }, + ) +} + pub struct ReplState<'a> { pub config: &'a Config, pub connection_name: String, pub client: ScopeQLClient, pub prompt: CommandLinePrompt, + pub prompt_state: Arc>, pub output_format: OutputFormat, pub show_timer: bool, } @@ -85,17 +104,55 @@ impl<'a> ReplState<'a> { let connection = config .get_connection(&connection_name) .expect("no default connection in config"); + let output_format = OutputFormat::Table; + let show_timer = true; + let prompt_state = Arc::new(Mutex::new(PromptRenderState::new(prompt_status_line( + &connection_name, + connection.endpoint(), + output_format, + show_timer, + )))); Self { config, connection_name, client: ScopeQLClient::from_connection(connection), - prompt: CommandLinePrompt::new(connection.endpoint().to_string()), - output_format: OutputFormat::Table, - show_timer: true, + prompt: CommandLinePrompt::new(Arc::clone(&prompt_state)), + prompt_state, + output_format, + show_timer, } } + fn endpoint(&self) -> &str { + self.config + .get_connection(&self.connection_name) + .map(|connection| connection.endpoint()) + .unwrap_or_default() + } + + fn refresh_prompt_status(&self) { + self.prompt_state + .lock() + .unwrap() + .set_line(prompt_status_line( + &self.connection_name, + self.endpoint(), + self.output_format, + self.show_timer, + )); + } + + fn set_output_format(&mut self, output_format: OutputFormat) { + self.output_format = output_format; + self.refresh_prompt_status(); + } + + fn set_show_timer(&mut self, show_timer: bool) { + self.show_timer = show_timer; + self.refresh_prompt_status(); + } + fn switch_connection(&mut self, name: String) -> Result<(), String> { let Some(connection) = self.config.get_connection(&name) else { let profiles = self @@ -109,8 +166,8 @@ impl<'a> ReplState<'a> { }; self.client = ScopeQLClient::from_connection(connection); - self.prompt = CommandLinePrompt::new(connection.endpoint().to_string()); self.connection_name = name; + self.refresh_prompt_status(); Ok(()) } } @@ -135,7 +192,10 @@ pub fn entrypoint(config: &Config) { ReedlineEvent::ExecuteHostCommand(CTRL_D_PROMPT_COMMAND.to_owned()), ); - let hinter = DefaultHinter::default().with_style(Style::new().fg(Color::DarkGray)); + let hinter = StatusHinter::new( + DefaultHinter::default().with_style(Style::new().fg(Color::DarkGray)), + Arc::clone(&repl.prompt_state), + ); let mut line_editor = Reedline::create() .use_bracketed_paste(true) @@ -165,7 +225,7 @@ pub fn entrypoint(config: &Config) { } } Signal::Success(input) => input, - Signal::CtrlC | Signal::CtrlD | Signal::ExternalBreak(_) | _ => { + _ => { println!(); break; } @@ -204,25 +264,20 @@ pub fn entrypoint(config: &Config) { println!( "Connection is set to {} ({})", repl.connection_name, - repl.prompt.endpoint() + repl.endpoint() ); } ReplSubCommand::Format(format) => { - if let Some(format) = format.format { - repl.output_format = format; - } + repl.set_output_format(format.format); println!("Output format is set to {}", repl.output_format.as_str()); } ReplSubCommand::Timer(timer) => match timer.mode { - None => { - println!("Timer is {}", if repl.show_timer { "on" } else { "off" }); - } - Some(TimerMode::On) => { - repl.show_timer = true; + TimerMode::On => { + repl.set_show_timer(true); println!("Timer is set to on"); } - Some(TimerMode::Off) => { - repl.show_timer = false; + TimerMode::Off => { + repl.set_show_timer(false); println!("Timer is set to off"); } }, diff --git a/scopeql/src/repl/prompt.rs b/scopeql/src/repl/prompt.rs index 77f3ae4..a0f2e94 100644 --- a/scopeql/src/repl/prompt.rs +++ b/scopeql/src/repl/prompt.rs @@ -13,34 +13,76 @@ // limitations under the License. use std::borrow::Cow; +use std::sync::Arc; +use std::sync::Mutex; +use nu_ansi_term::Style; +use reedline::DefaultHinter; +use reedline::Hinter; +use reedline::History; use reedline::Prompt; use reedline::PromptEditMode; use reedline::PromptHistorySearch; use reedline::PromptHistorySearchStatus; +#[derive(Debug, Clone)] +pub struct PromptRenderState { + line: String, + input_is_empty: bool, +} + +impl PromptRenderState { + pub fn new(line: String) -> Self { + Self { + line, + input_is_empty: true, + } + } + + pub fn set_line(&mut self, line: String) { + self.line = line; + } + + fn set_input_is_empty(&mut self, input_is_empty: bool) { + self.input_is_empty = input_is_empty; + } + + fn input_is_empty(&self) -> bool { + self.input_is_empty + } + + fn line(&self) -> &str { + &self.line + } +} + #[derive(Debug)] pub struct CommandLinePrompt { - endpoint: String, + state: Arc>, } impl CommandLinePrompt { - pub fn new(endpoint: String) -> Self { - Self { endpoint } + pub fn new(state: Arc>) -> Self { + Self { state } } - pub fn endpoint(&self) -> &str { - &self.endpoint + fn prompt_len(&self) -> usize { + "scopeql".len() } - fn prompt_len(&self) -> usize { - "scopeql[]".len() + self.endpoint.len() + fn prompt_indicator(&self) -> String { + let state = self.state.lock().unwrap(); + if state.input_is_empty() { + format!("> \x1b[s\n{}\x1b[u", state.line()) + } else { + "> ".to_string() + } } } impl Prompt for CommandLinePrompt { fn render_prompt_left(&'_ self) -> Cow<'_, str> { - format!("scopeql[{}]> ", self.endpoint).into() + "scopeql".into() } fn render_prompt_right(&'_ self) -> Cow<'_, str> { @@ -48,7 +90,7 @@ impl Prompt for CommandLinePrompt { } fn render_prompt_indicator(&'_ self, _: PromptEditMode) -> Cow<'_, str> { - "".into() + self.prompt_indicator().into() } fn render_prompt_multiline_indicator(&'_ self) -> Cow<'_, str> { @@ -72,7 +114,81 @@ impl Prompt for CommandLinePrompt { reedline::Color::DarkGrey } + fn get_indicator_color(&self) -> reedline::Color { + reedline::Color::DarkGrey + } + fn get_prompt_multiline_color(&self) -> nu_ansi_term::Color { nu_ansi_term::Color::DarkGray } } + +pub struct StatusHinter { + inner: DefaultHinter, + state: Arc>, + status_style: Style, +} + +impl StatusHinter { + pub fn new(inner: DefaultHinter, state: Arc>) -> Self { + Self { + inner, + state, + status_style: Style::new().fg(nu_ansi_term::Color::DarkGray), + } + } + + fn render_status(&self, use_ansi_coloring: bool) -> String { + let status = self.state.lock().unwrap().line().to_string(); + + if use_ansi_coloring { + self.status_style.paint(status).to_string() + } else { + status + } + } + + fn render_status_only_hint(status: &str) -> String { + // When DefaultHinter has no history suffix, the status bar is the whole + // hint. Reedline does not reliably render a hint beginning with a + // newline, so prefix a non-printing SGR reset. + format!("\x1b[0m\n{status}") + } +} + +impl Hinter for StatusHinter { + fn handle( + &mut self, + line: &str, + pos: usize, + history: &dyn History, + use_ansi_coloring: bool, + cwd: &str, + ) -> String { + let hint = self + .inner + .handle(line, pos, history, use_ansi_coloring, cwd); + if line.is_empty() { + self.state.lock().unwrap().set_input_is_empty(true); + return hint; + } + + self.state.lock().unwrap().set_input_is_empty(false); + + let status = self.render_status(use_ansi_coloring); + + if hint.is_empty() { + Self::render_status_only_hint(&status) + } else { + format!("{hint}\n{status}") + } + } + + fn complete_hint(&self) -> String { + self.inner.complete_hint() + } + + fn next_hint_token(&self) -> String { + self.inner.next_hint_token() + } +} From 845372ba57ad69c9212c20677ed6fc6e4e52642d Mon Sep 17 00:00:00 2001 From: andylokandy Date: Wed, 29 Apr 2026 02:10:51 +0800 Subject: [PATCH 3/7] clap error message --- scopeql/src/repl/command.rs | 159 +++++++++++++++++++++++++++++++++ scopeql/src/repl/entrypoint.rs | 3 +- 2 files changed, 161 insertions(+), 1 deletion(-) diff --git a/scopeql/src/repl/command.rs b/scopeql/src/repl/command.rs index c5c8e31..0b3a6df 100644 --- a/scopeql/src/repl/command.rs +++ b/scopeql/src/repl/command.rs @@ -14,6 +14,9 @@ use clap::Parser; use clap::Subcommand; +use clap::error::ContextKind; +use clap::error::ContextValue; +use clap::error::ErrorKind; use crate::client::ScopeQLClient; use crate::command::OutputFormat; @@ -106,3 +109,159 @@ impl CommandCancel { } } } + +pub fn render_repl_parse_error(err: clap::Error) -> String { + if matches!( + err.kind(), + ErrorKind::DisplayHelp + | ErrorKind::DisplayHelpOnMissingArgumentOrSubcommand + | ErrorKind::DisplayVersion + ) { + return err.render().to_string(); + } + + let mut message = match err.kind() { + ErrorKind::InvalidValue | ErrorKind::ValueValidation => { + let arg = context_string(&err, ContextKind::InvalidArg) + .map(|arg| display_arg(&arg)) + .unwrap_or_else(|| "argument".to_string()); + + match context_string(&err, ContextKind::InvalidValue) { + Some(value) if value.is_empty() => format!("error: missing value for {arg}"), + Some(value) => format!("error: invalid value {:?} for {arg}", value), + None => format!("error: invalid value for {arg}"), + } + } + ErrorKind::InvalidSubcommand => { + let command = context_string(&err, ContextKind::InvalidSubcommand) + .unwrap_or_else(|| "command".to_string()); + format!("error: unknown command {:?}", command) + } + ErrorKind::UnknownArgument => { + let arg = context_string(&err, ContextKind::InvalidArg) + .unwrap_or_else(|| "argument".to_string()); + format!("error: unexpected argument {:?}", arg) + } + ErrorKind::MissingRequiredArgument => { + let args = context_values(&err, ContextKind::InvalidArg) + .into_iter() + .map(|arg| display_arg(&arg)) + .collect::>(); + match args.as_slice() { + [] => "error: missing required argument".to_string(), + [arg] => format!("error: missing required argument {arg}"), + args => format!("error: missing required arguments: {}", args.join(", ")), + } + } + ErrorKind::TooManyValues => { + let value = context_string(&err, ContextKind::InvalidValue) + .unwrap_or_else(|| "value".to_string()); + let arg = context_string(&err, ContextKind::InvalidArg) + .map(|arg| display_arg(&arg)) + .unwrap_or_else(|| "argument".to_string()); + format!("error: unexpected value {:?} for {arg}", value) + } + ErrorKind::TooFewValues | ErrorKind::WrongNumberOfValues => { + let arg = context_string(&err, ContextKind::InvalidArg) + .map(|arg| display_arg(&arg)) + .unwrap_or_else(|| "argument".to_string()); + format!("error: wrong number of values for {arg}") + } + ErrorKind::NoEquals => { + let arg = context_string(&err, ContextKind::InvalidArg) + .unwrap_or_else(|| "argument".to_string()); + format!("error: {arg} requires '='") + } + _ => format!( + "error: {}", + err.kind().as_str().unwrap_or("failed to parse command") + ), + }; + + append_values( + &mut message, + "possible values", + context_values(&err, ContextKind::ValidValue), + ); + append_values( + &mut message, + "available", + context_values(&err, ContextKind::ValidSubcommand), + ); + append_suggestion( + &mut message, + context_string(&err, ContextKind::SuggestedValue) + .or_else(|| context_string(&err, ContextKind::SuggestedSubcommand)) + .or_else(|| context_string(&err, ContextKind::SuggestedArg)), + ); + append_usage(&mut message, context_string(&err, ContextKind::Usage)); + message.push('\n'); + message +} + +fn context_string(err: &clap::Error, kind: ContextKind) -> Option { + let values = context_values(err, kind); + if values.len() == 1 { + values.into_iter().next() + } else { + None + } +} + +fn context_values(err: &clap::Error, kind: ContextKind) -> Vec { + err.context() + .find_map(|(context_kind, value)| { + (context_kind == kind).then(|| context_value_to_strings(value)) + }) + .unwrap_or_default() +} + +fn context_value_to_strings(value: &ContextValue) -> Vec { + match value { + ContextValue::None => vec![], + ContextValue::String(value) => vec![value.clone()], + ContextValue::Strings(values) => values.clone(), + ContextValue::StyledStr(value) => vec![value.to_string()], + ContextValue::StyledStrs(values) => values.iter().map(ToString::to_string).collect(), + ContextValue::Bool(value) => vec![value.to_string()], + ContextValue::Number(value) => vec![value.to_string()], + _ => vec![value.to_string()], + } +} + +fn display_arg(arg: &str) -> String { + arg.trim() + .strip_prefix('<') + .and_then(|arg| arg.strip_suffix('>')) + .unwrap_or(arg) + .to_string() +} + +fn append_values(message: &mut String, label: &str, values: Vec) { + if !values.is_empty() { + message.push_str(&format!("\n{label}: {}", values.join(", "))); + } +} + +fn append_suggestion(message: &mut String, suggestion: Option) { + if let Some(suggestion) = suggestion.filter(|suggestion| !suggestion.is_empty()) { + message.push_str(&format!("\nhint: did you mean {:?}?", suggestion)); + } +} + +fn append_usage(message: &mut String, usage: Option) { + let Some(usage) = usage else { + return; + }; + let usage = usage.trim(); + if usage.is_empty() { + return; + } + let usage = usage + .strip_prefix("Usage:") + .or_else(|| usage.strip_prefix("usage:")) + .map(str::trim) + .unwrap_or(usage); + + message.push_str(&format!("\nusage: {usage}")); +} diff --git a/scopeql/src/repl/entrypoint.rs b/scopeql/src/repl/entrypoint.rs index a71f1db..bca9b11 100644 --- a/scopeql/src/repl/entrypoint.rs +++ b/scopeql/src/repl/entrypoint.rs @@ -43,6 +43,7 @@ use crate::global; use crate::repl::command::ReplCommand; use crate::repl::command::ReplSubCommand; use crate::repl::command::TimerMode; +use crate::repl::command::render_repl_parse_error; use crate::repl::highlight::ScopeQLHighlighter; use crate::repl::lexer; use crate::repl::prompt::CommandLinePrompt; @@ -250,7 +251,7 @@ pub fn entrypoint(config: &Config) { let cmd = match ReplCommand::try_parse_from(args) { Ok(cmd) => cmd, Err(err) => { - eprintln!("{err}"); + eprint!("{}", render_repl_parse_error(err)); continue; } }; From 8d44b10da212f0feaea47d4421719b2876bec7d9 Mon Sep 17 00:00:00 2001 From: andylokandy Date: Wed, 29 Apr 2026 02:35:09 +0800 Subject: [PATCH 4/7] help --- scopeql/src/repl/command.rs | 62 +++++++++++++++++++++++++++++++--- scopeql/src/repl/entrypoint.rs | 22 ++---------- 2 files changed, 59 insertions(+), 25 deletions(-) diff --git a/scopeql/src/repl/command.rs b/scopeql/src/repl/command.rs index 0b3a6df..ce88687 100644 --- a/scopeql/src/repl/command.rs +++ b/scopeql/src/repl/command.rs @@ -12,6 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +use std::fmt::Write; + +use clap::Command; +use clap::CommandFactory; use clap::Parser; use clap::Subcommand; use clap::error::ContextKind; @@ -23,7 +27,7 @@ use crate::command::OutputFormat; use crate::global::rt; #[derive(Debug, Parser)] -#[command(name = "", disable_help_subcommand = true)] +#[command(name = "", disable_help_flag = true, disable_help_subcommand = true)] pub struct ReplCommand { #[command(subcommand)] pub cmd: ReplSubCommand, @@ -43,12 +47,13 @@ pub enum ReplSubCommand { /// Cancel the statement with the given ID. #[command(name = "/cancel")] Cancel(CommandCancel), - /// Print help. + /// Show help. #[command(name = "/help")] - Help, + Help(CommandHelp), } #[derive(Debug, Parser)] +#[command(disable_help_flag = true)] pub struct CommandConnection { /// The connection name to use. #[arg(value_name = "NAME")] @@ -56,6 +61,7 @@ pub struct CommandConnection { } #[derive(Debug, Parser)] +#[command(disable_help_flag = true)] pub struct CommandFormat { /// The output format to use. #[arg(value_enum, value_name = "FORMAT")] @@ -63,9 +69,10 @@ pub struct CommandFormat { } #[derive(Debug, Parser)] +#[command(disable_help_flag = true)] pub struct CommandTimer { /// Enable or disable timing display. - #[arg(value_enum)] + #[arg(value_enum, value_name = "on|off")] pub mode: TimerMode, } @@ -76,12 +83,17 @@ pub enum TimerMode { } #[derive(Debug, Parser)] +#[command(disable_help_flag = true)] pub struct CommandCancel { /// The ID of the statement to cancel. - #[arg(value_name = "STATEMENT_ID")] + #[arg(value_name = "ID")] pub statement_id: String, } +#[derive(Debug, Parser)] +#[command(disable_help_flag = true)] +pub struct CommandHelp {} + impl CommandCancel { pub fn run(self, client: &ScopeQLClient) { let statement_id = &self.statement_id; @@ -110,6 +122,46 @@ impl CommandCancel { } } +pub fn render_repl_help() -> String { + let mut cmd = ReplCommand::command(); + render_repl_command_list(&mut cmd) +} + +fn render_repl_command_list(cmd: &mut Command) -> String { + let rows = cmd + .get_subcommands_mut() + .map(|subcommand| (command_usage(subcommand), command_about(subcommand))) + .collect::>(); + let width = rows.iter().map(|(usage, _)| usage.len()).max().unwrap_or(0); + + let mut output = String::from("Commands:\n"); + for (usage, about) in rows { + writeln!(&mut output, " {usage: String { + let usage = command.render_usage().to_string(); + let usage = usage + .trim() + .strip_prefix("Usage:") + .map(str::trim) + .unwrap_or_else(|| usage.trim()) + .to_string(); + usage +} + +fn command_about(command: &Command) -> String { + command + .get_about() + .map(ToString::to_string) + .unwrap_or_default() + .trim() + .trim_end_matches('.') + .to_string() +} + pub fn render_repl_parse_error(err: clap::Error) -> String { if matches!( err.kind(), diff --git a/scopeql/src/repl/entrypoint.rs b/scopeql/src/repl/entrypoint.rs index bca9b11..13d8632 100644 --- a/scopeql/src/repl/entrypoint.rs +++ b/scopeql/src/repl/entrypoint.rs @@ -12,12 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::fmt::Write; use std::sync::Arc; use std::sync::Mutex; use std::time::Duration; -use clap::CommandFactory; use clap::Parser; use indicatif::ProgressBar; use indicatif::ProgressStyle; @@ -43,6 +41,7 @@ use crate::global; use crate::repl::command::ReplCommand; use crate::repl::command::ReplSubCommand; use crate::repl::command::TimerMode; +use crate::repl::command::render_repl_help; use crate::repl::command::render_repl_parse_error; use crate::repl::highlight::ScopeQLHighlighter; use crate::repl::lexer; @@ -283,24 +282,7 @@ pub fn entrypoint(config: &Config) { } }, ReplSubCommand::Cancel(cancel) => cancel.run(&repl.client), - ReplSubCommand::Help => { - let cmd = ReplCommand::command(); - - let width = cmd - .get_subcommands() - .map(|c| c.get_name().len()) - .max() - .unwrap_or(0); - - println!("Commands:"); - for subcommand in cmd.get_subcommands() { - let mut message = format!(" {:width$}", subcommand.get_name()); - if let Some(about) = subcommand.get_about() { - write!(&mut message, " {about}").unwrap(); - } - println!("{message}"); - } - } + ReplSubCommand::Help(_) => print!("{}", render_repl_help()), } continue; } From f6dcc08871cef7f91d190f0eb306ff0a7bccb3ce Mon Sep 17 00:00:00 2001 From: andylokandy Date: Wed, 3 Jun 2026 01:10:05 +0800 Subject: [PATCH 5/7] test: trim client config tests --- scopeql/src/client/mod.rs | 49 --------------------------------------- 1 file changed, 49 deletions(-) diff --git a/scopeql/src/client/mod.rs b/scopeql/src/client/mod.rs index 2504987..65e3682 100644 --- a/scopeql/src/client/mod.rs +++ b/scopeql/src/client/mod.rs @@ -189,52 +189,3 @@ impl ScopeQLClient { } } } - -#[cfg(test)] -mod tests { - use super::*; - use crate::config::Config; - - fn config_from_str(content: &str) -> Config { - toml::from_str(content).unwrap() - } - - #[test] - fn from_connection_rejects_invalid_endpoint() { - let config = config_from_str( - r#" -default_connection = "default" - -[connections.default] -endpoint = "" -auth = "direct" -"#, - ); - let connection = config - .get_default_connection() - .expect("test config should have a default connection"); - - let err = ScopeQLClient::from_connection(connection).unwrap_err(); - assert_eq!(err.to_string(), "invalid connection config"); - } - - #[test] - fn from_connection_rejects_invalid_headers() { - let config = config_from_str( - r#" -default_connection = "default" - -[connections.default] -endpoint = "http://127.0.0.1:6543" -auth = "direct" -headers = ["missing colon"] -"#, - ); - let connection = config - .get_default_connection() - .expect("test config should have a default connection"); - - let err = ScopeQLClient::from_connection(connection).unwrap_err(); - assert_eq!(err.to_string(), "invalid headers in config"); - } -} From b9847062746b562f86e20f863f2c9b7274549adf Mon Sep 17 00:00:00 2001 From: tison Date: Wed, 3 Jun 2026 15:47:03 +0800 Subject: [PATCH 6/7] revert some random changes Signed-off-by: tison --- scopeql/src/repl/command.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/scopeql/src/repl/command.rs b/scopeql/src/repl/command.rs index ea1730d..7a533a1 100644 --- a/scopeql/src/repl/command.rs +++ b/scopeql/src/repl/command.rs @@ -27,7 +27,7 @@ use crate::command::OutputFormat; use crate::global::rt; #[derive(Debug, Parser)] -#[command(name = "", disable_help_flag = true, disable_help_subcommand = true)] +#[command(name = "", disable_help_subcommand = true)] pub struct ReplCommand { #[command(subcommand)] pub cmd: ReplSubCommand, @@ -38,10 +38,10 @@ pub enum ReplSubCommand { /// Switch connection profile. #[command(name = "/connection")] Connection(CommandConnection), - /// Set output format. + /// Display or set output format. #[command(name = "/format")] Format(CommandFormat), - /// Enable or disable timing display. + /// Display or set the timing display mode. #[command(name = "/timer")] Timer(CommandTimer), /// Cancel the statement with the given ID. @@ -53,7 +53,6 @@ pub enum ReplSubCommand { } #[derive(Debug, Parser)] -#[command(disable_help_flag = true)] pub struct CommandConnection { /// The connection name to use. #[arg(value_name = "NAME")] @@ -61,7 +60,6 @@ pub struct CommandConnection { } #[derive(Debug, Parser)] -#[command(disable_help_flag = true)] pub struct CommandFormat { /// The output format to use; if not specified, show the current format. #[arg(value_enum, value_name = "FORMAT")] @@ -69,10 +67,9 @@ pub struct CommandFormat { } #[derive(Debug, Parser)] -#[command(disable_help_flag = true)] pub struct CommandTimer { /// Enable or disable timing display; if not specified, show the current mode. - #[arg(value_enum, value_name = "on|off")] + #[arg(value_enum)] pub mode: Option, } @@ -83,10 +80,9 @@ pub enum TimerMode { } #[derive(Debug, Parser)] -#[command(disable_help_flag = true)] pub struct CommandCancel { /// The ID of the statement to cancel. - #[arg(value_name = "ID")] + #[arg(value_name = "STATEMENT_ID")] pub statement_id: String, } From 18103b2b3049fcf64b8b862277ce7d983c34067a Mon Sep 17 00:00:00 2001 From: tison Date: Wed, 3 Jun 2026 15:51:23 +0800 Subject: [PATCH 7/7] prepare for next release Signed-off-by: tison --- CHANGELOG.md | 3 + Cargo.lock | 723 ++++++++++++++------------------------------ scopeql/Cargo.toml | 8 +- scopeql/src/main.rs | 4 +- 4 files changed, 237 insertions(+), 501 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45b405d..9e3d20c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ All significant changes to this software be documented in this file. ## Unreleased +## v0.6.0 (2026-06-03) + ### Breaking Changes * Remove `--header` options and the REPL `/headers` command. @@ -26,6 +28,7 @@ api_key = "sk_..." * Allow custom HTTP headers to be configured through connection configuration or `SCOPEQL_CONFIG_CONNECTIONS__HEADERS`. * Support new command `scopeql config` with subcommands `set-connection`, `delete-connection`, `get-connections`, and `use-connection` to manage connection specs. +* Support REPL command `/connections` to list available connections and the current connection. ## v0.5.1 (2026-04-15) diff --git a/Cargo.lock b/Cargo.lock index 03c79d6..7262cce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -99,15 +99,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.16.3" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" dependencies = [ "aws-lc-sys", "zeroize", @@ -115,9 +115,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" dependencies = [ "cc", "cmake", @@ -133,9 +133,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" dependencies = [ "serde_core", ] @@ -162,9 +162,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byteorder" @@ -180,9 +180,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cc" -version = "1.2.61" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", @@ -461,9 +461,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -539,9 +539,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -565,9 +565,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "encode_unicode" @@ -590,17 +590,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "erased-serde" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" -dependencies = [ - "serde", - "serde_core", - "typeid", -] - [[package]] name = "errno" version = "0.3.14" @@ -613,9 +602,9 @@ dependencies = [ [[package]] name = "exn" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca6badeb8a07b76663c7d7cb0903c1cc40c38d6fc06d3a2206780c63e8b9496" +checksum = "84c8eaf8836c22a841ee5362e227dd09e5908b52fa2a9bc786cf153c0f344b99" [[package]] name = "fastant" @@ -693,13 +682,12 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.27" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" dependencies = [ "cfg-if", "libc", - "libredox", ] [[package]] @@ -832,14 +820,12 @@ dependencies = [ [[package]] name = "gix" -version = "0.83.0" +version = "0.84.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce52001b946a6249d5d0d3011df0a042ac3f8a4d013460db6476577b0b9c567" +checksum = "ae54ae0ebd1a5a3c3f8d95dd3b5ca6e63f4fed9bfd585e13801a97d7bde8f9ce" dependencies = [ "gix-actor", - "gix-archive", "gix-attributes", - "gix-blame", "gix-command", "gix-commitgraph", "gix-config", @@ -857,8 +843,6 @@ dependencies = [ "gix-ignore", "gix-index", "gix-lock", - "gix-merge", - "gix-negotiate", "gix-object", "gix-odb", "gix-pack", @@ -880,7 +864,6 @@ dependencies = [ "gix-utils", "gix-validate", "gix-worktree", - "gix-worktree-state", "gix-worktree-stream", "nonempty", "smallvec", @@ -889,33 +872,20 @@ dependencies = [ [[package]] name = "gix-actor" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "272916673b83714734b15d4ef3c8b5f1ccddb15fea8ff548430b97c1ab7b7ed8" -dependencies = [ - "bstr", - "gix-date", - "gix-error", -] - -[[package]] -name = "gix-archive" -version = "0.32.0" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a20ec244b733338d4cb60e5e05eac700dab7fcc689647b1d1daa9396b119342" +checksum = "8bc998b8f746dda8565450d08a63b792ced9165d8c27a1ed3f02799ec6a7820f" dependencies = [ "bstr", "gix-date", "gix-error", - "gix-object", - "gix-worktree-stream", ] [[package]] name = "gix-attributes" -version = "0.33.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe17c5a1c0b6f2ef1476aa1d3222ea50cdff67608016613a58bfc3e078046000" +checksum = "8d43f12e246d3bf7ec624c8fc15ac4a4b62b7c4c6f586cb82be6c90bf84c9d02" dependencies = [ "bstr", "gix-glob", @@ -930,47 +900,27 @@ dependencies = [ [[package]] name = "gix-bitmap" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ecbfc77ec6852294e341ecc305a490b59f2813e6ca42d79efda5099dcab1894" -dependencies = [ - "gix-error", -] - -[[package]] -name = "gix-blame" -version = "0.13.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dab9a942ab54a9661ded7397c3bf927274e7afa94494db0d75cfcbde02ca0a" +checksum = "52ebef0c26ad305747649e727bbcd56a7b7910754eb7cea88f6dff6f93c51283" dependencies = [ - "gix-commitgraph", - "gix-date", - "gix-diff", "gix-error", - "gix-hash", - "gix-object", - "gix-revwalk", - "gix-trace", - "gix-traverse", - "gix-worktree", - "smallvec", - "thiserror", ] [[package]] name = "gix-chunk" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf288be9b60fe7231de03771faa292be1493d84786f68727e33ad1f91764320" +checksum = "9faee47943b638e58ddd5e275a4906ad3e4b6c8584f1d41bd18ab9032ec52afb" dependencies = [ "gix-error", ] [[package]] name = "gix-command" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86335306511abe43d75c866d4b1f3d90932fe202edcd43e1314036333e7384d8" +checksum = "00706d4fef135ef4b01680d5218c6ee40cda8baf697b864296cbc887d19118f6" dependencies = [ "bstr", "gix-path", @@ -981,9 +931,9 @@ dependencies = [ [[package]] name = "gix-commitgraph" -version = "0.37.0" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe3b5aa0f24e19028c261d229aeeedafcaaa52ebd71021cc15184620fc9d32eb" +checksum = "7f675d0df484a7f6a47e64bd6f311af489d947c0323b0564f36d14f3d7762abb" dependencies = [ "bstr", "gix-chunk", @@ -995,9 +945,9 @@ dependencies = [ [[package]] name = "gix-config" -version = "0.56.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c01848aebd21c67f6ba41f1de8efd46ae96df21f001954a3c9e1517e514d410" +checksum = "4f2372d4b49ca28431e7d150cab9d25edc1890f0184bd57eb0e917c7799e63de" dependencies = [ "bstr", "gix-config-value", @@ -1013,9 +963,9 @@ dependencies = [ [[package]] name = "gix-config-value" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b39ed39ee4c10a3b157f9fb94bac8098d9f8e56201f0cf7dee6c187416c4b2" +checksum = "ed42168329552f6c2e5df09665c104199d45d84bedb53683738a49b57fe1baab" dependencies = [ "bitflags", "bstr", @@ -1026,22 +976,21 @@ dependencies = [ [[package]] name = "gix-date" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94cdae4eb4b0f4136e3d9b3aa2d2cd03cfb5bb9b636b31263aea2df86d41543" +checksum = "a3ecab64a98bbac9f8e02990a9ea5e3c974a7d49b95f2bd70ad94ad22fa6b48c" dependencies = [ "bstr", "gix-error", "itoa", "jiff", - "smallvec", ] [[package]] name = "gix-diff" -version = "0.63.0" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc08e0fa1a91ff5f24affeab052f198056645e1de004910bde7b82b50ea5982a" +checksum = "3b6d9528f32d94cef2edf39a1ac01fe5a0fc44ddbb18d9e44099936047c3302b" dependencies = [ "bstr", "gix-attributes", @@ -1063,9 +1012,9 @@ dependencies = [ [[package]] name = "gix-dir" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a0fc06e9e1e430cbf0a313666976d90f822f461a6525320427aa9b8af5236c" +checksum = "21bb2a53a6fd917ec499ed0bfb5b6887de7a15bd79197dcea7c987938749a9f1" dependencies = [ "bstr", "gix-discover", @@ -1083,9 +1032,9 @@ dependencies = [ [[package]] name = "gix-discover" -version = "0.51.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17852e6a501e688a1702b24ebe5b3761d4719455bc869fd29f38b0b859bcad34" +checksum = "77bacdd12b7879d2178a80c58c2f319995e4654e1a7a23e3181e5c8a12b824f7" dependencies = [ "bstr", "dunce", @@ -1098,18 +1047,18 @@ dependencies = [ [[package]] name = "gix-error" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e207b971746ab724fccdfced2e4e19e854744611904a0195d3aa8fda8a110613" +checksum = "e57831e199be480af90dcd7e459abed8a174c09ec9a6e2cc8f7ca6c54598b06b" dependencies = [ "bstr", ] [[package]] name = "gix-features" -version = "0.48.0" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af375693ad5333d0a2c66b4c5b2cbe9ccc38e34f8e8bf24e4ae42c12307fdc4f" +checksum = "1849ae154d38bc403185be14fa871e38e3c93ee606875d94e207fdb9fba52dbc" dependencies = [ "bytes", "crc32fast", @@ -1126,9 +1075,9 @@ dependencies = [ [[package]] name = "gix-filter" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac917dbe9653c9b615d248db91907a365bd779750c9e1b457a9d9fdeece3a08" +checksum = "ecf74b7d16f6694ce4a3049074c41be0c7987105743674f1671807bd6dce09fa" dependencies = [ "bstr", "encoding_rs", @@ -1147,9 +1096,9 @@ dependencies = [ [[package]] name = "gix-fs" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1967daac9848757c47c2aef0c57bcadc1a897347f559778249bf286a536c86" +checksum = "6cdff46db8798e47e2f727d84b9379aac5add3dd3d9d0b07bb4d7d5d640771fe" dependencies = [ "bstr", "fastrand", @@ -1161,9 +1110,9 @@ dependencies = [ [[package]] name = "gix-glob" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bf29249a069bf2507f5964f80997f37b134d320ea348d66527726b9be2c38c" +checksum = "d1fcb8ef5b16bcf874abe9b68d8abb3c0493c876d367ab824151f30a0f3f3756" dependencies = [ "bitflags", "bstr", @@ -1173,9 +1122,9 @@ dependencies = [ [[package]] name = "gix-hash" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf70d1e252337eed16360f8b8ebb71865ece58eab7954b39ce38b420de703d2" +checksum = "cb0926d3819c837750b4e03c7754901e73f68b8c9b690753a6372a1bed4eedce" dependencies = [ "faster-hex", "gix-features", @@ -1185,20 +1134,20 @@ dependencies = [ [[package]] name = "gix-hashtable" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d33b455e07b3c16d3b2eeebc7b38d2dafcbf8a653de1138ef55d4c2a1fd0b08b" +checksum = "b0e30b93eea8718baf7d8153fcb938e2926175bbf18097c09f1c01b6f0be0563" dependencies = [ "gix-hash", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "parking_lot", ] [[package]] name = "gix-ignore" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb13fbbeeafee943e52b61fcc88dfddf6a452fcaf0c4d0cdc8f218fa25bbec5" +checksum = "d491bab9bf2c9f341dc754f425c31d5d3f63aca615312167b82e1deeaca97d8d" dependencies = [ "bstr", "gix-glob", @@ -1209,19 +1158,19 @@ dependencies = [ [[package]] name = "gix-imara-diff" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39eb0623e15e4cb83c02ce6a959e48fadd1ae3b715b36b5acc01816e01388c82" +checksum = "19753d40da53d0ec41604750eeb969097a90fb2d7f7992730d904541c04e2c19" dependencies = [ "bstr", - "hashbrown 0.16.1", + "hashbrown 0.17.1", ] [[package]] name = "gix-index" -version = "0.51.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c3ef97ad08121e4327a6226bd63fed6b9e3c6b976d48bddd4356d9d41191db" +checksum = "4e6b28cc592dc753adb58302bb14a64e412ee591a3bec77aa4df87bff74fa80d" dependencies = [ "bitflags", "bstr", @@ -1236,7 +1185,7 @@ dependencies = [ "gix-traverse", "gix-utils", "gix-validate", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "itoa", "libc", "memmap2", @@ -1247,60 +1196,20 @@ dependencies = [ [[package]] name = "gix-lock" -version = "23.0.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3bc074e5723027b482dcd9ab99d95804a53742f6de812d0172fbba4a186c1" +checksum = "65c9dedd9e90b0d47624d2ed241d394e09294118364e87b9b7e5f1fe755f3c2c" dependencies = [ "gix-tempfile", "gix-utils", "thiserror", ] -[[package]] -name = "gix-merge" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74bbcdcc52b70a32f0a151b024dff9d0fcf56ee48f00d9503e735af9d99ea881" -dependencies = [ - "bstr", - "gix-command", - "gix-diff", - "gix-filter", - "gix-fs", - "gix-hash", - "gix-imara-diff", - "gix-index", - "gix-object", - "gix-path", - "gix-quote", - "gix-revision", - "gix-revwalk", - "gix-tempfile", - "gix-trace", - "gix-worktree", - "nonempty", - "thiserror", -] - -[[package]] -name = "gix-negotiate" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "103d42bfade1b8a96ca5005933127bdad461ce588d92422b2c2daa3ff20d780c" -dependencies = [ - "bitflags", - "gix-commitgraph", - "gix-date", - "gix-hash", - "gix-object", - "gix-revwalk", -] - [[package]] name = "gix-object" -version = "0.60.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38075a95d7cc5df8afd38e72c617026c1456952207a4120a7f55a3fbf93b4d7" +checksum = "d5cd857e29429c7213bdef3f5aef83f8cc124774fe8ae0d27b1607d218d6d525" dependencies = [ "bstr", "gix-actor", @@ -1317,9 +1226,9 @@ dependencies = [ [[package]] name = "gix-odb" -version = "0.80.0" +version = "0.81.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeeda12a9663120418735ecdc1250d06eeab0be75700e47b3402a981331716ba" +checksum = "7d004c32858b1556f2d7874405edb3c97dc78fc09beaa87d57bb077ee2858a7d" dependencies = [ "arc-swap", "gix-features", @@ -1338,9 +1247,9 @@ dependencies = [ [[package]] name = "gix-pack" -version = "0.70.0" +version = "0.71.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf02e6f5c8f07a069c9ea5245f40d9b14856ada4086091dc99941b49002b4fa" +checksum = "e43626f2a27d1033674ec1a196b845614231e6bbd949d5e21c133045ff56b174" dependencies = [ "clru", "gix-chunk", @@ -1357,9 +1266,9 @@ dependencies = [ [[package]] name = "gix-packetline" -version = "0.21.3" +version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "362246df440ee691699f0664cbf7006a6ece477db6734222be95e4198e5656e6" +checksum = "bb18337ba2830bb43367d1af43819c8c78f31337f079fc76d0f1f1750a173126" dependencies = [ "bstr", "faster-hex", @@ -1369,9 +1278,9 @@ dependencies = [ [[package]] name = "gix-path" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a6059e8a4c1b7f406e24716499cefa3926e060876fb1959ef225efeee346e" +checksum = "afa6ac14cd14939ea94a496ce7460daa6511c09f5b84757e9cfc6f9c8d0f93a6" dependencies = [ "bstr", "gix-trace", @@ -1381,9 +1290,9 @@ dependencies = [ [[package]] name = "gix-pathspec" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a84a4f083dd70fb49f4377e13afa6d90df2daaa1c705c49d6ff1331fc7e8855" +checksum = "3050783b41ee11511e1e8fb35623df81806194f4030395f14f48ea37c2798c9f" dependencies = [ "bitflags", "bstr", @@ -1396,9 +1305,9 @@ dependencies = [ [[package]] name = "gix-protocol" -version = "0.61.0" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4bee82db63ec635996b96efae71cf467c155fa3f34a556184373224a26c4fd" +checksum = "51dea3acb390707ab868f1f9584f18449eb95d869deffae96768e47d303595ee" dependencies = [ "bstr", "gix-date", @@ -1415,9 +1324,9 @@ dependencies = [ [[package]] name = "gix-quote" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e97b73791a64bc0fa7dd2c5b3e551136115f97750b876ed1c952c7a7dbaf8be" +checksum = "a6e541fc33cc2b783b7979040d445a0c86a2eca747c8faea4ca84230d06ae6ef" dependencies = [ "bstr", "gix-error", @@ -1426,9 +1335,9 @@ dependencies = [ [[package]] name = "gix-ref" -version = "0.63.0" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8ba9cc15f558b274c99349b83130f5ec83459660828fde9718bbbb43a726167" +checksum = "4c04f64c37eb7e6feb73c7060f8dc6f381cc5de5d53249bfd450bc48a86b2e8b" dependencies = [ "gix-actor", "gix-features", @@ -1446,9 +1355,9 @@ dependencies = [ [[package]] name = "gix-refspec" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61755b27d57edc8940a1b1593c8c61548ca8e4c02da1ed8d5bfeda9eb2a6b761" +checksum = "b216ae06ec74b5f24ad0142026a997fb0a935b7410eaf9c1616fc3f0e6c5a6d3" dependencies = [ "bstr", "gix-error", @@ -1462,11 +1371,10 @@ dependencies = [ [[package]] name = "gix-revision" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb5288fac706d3ea3e4e2ba9ec38b78743b8c02f422e18cb342299cfd6ab7e8" +checksum = "0b47c88884dd3c1a19a39da19d10211fcdea2809aadc86869b6e824a1774340f" dependencies = [ - "bitflags", "bstr", "gix-commitgraph", "gix-date", @@ -1474,15 +1382,14 @@ dependencies = [ "gix-hash", "gix-object", "gix-revwalk", - "gix-trace", "nonempty", ] [[package]] name = "gix-revwalk" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "313813706b073a12ff7f9b2896bf3e6504cdac7cfbc97b1920114724705069f0" +checksum = "85f5756abffe0917827aac683b13684ed99875bc398fa1f9b8f479b0681ef9e6" dependencies = [ "gix-commitgraph", "gix-date", @@ -1496,9 +1403,9 @@ dependencies = [ [[package]] name = "gix-sec" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a3a2d3e504a238136751e646a6c028252286a0ea64ea9974bf0498633407c6" +checksum = "ab8519976e4c7e486270740a5400369f37940779b80bd1377d94cfa1125d01b3" dependencies = [ "bitflags", "gix-path", @@ -1508,9 +1415,9 @@ dependencies = [ [[package]] name = "gix-shallow" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29187305521bfacf4aefd284ab28dbfa9fb74abd39a5e63dd313b1baa5808c27" +checksum = "a292fc2fe548c5dfa575479d16b445b0ddf1dd2f56f1fec6aed386f82553cd97" dependencies = [ "bstr", "gix-hash", @@ -1521,9 +1428,9 @@ dependencies = [ [[package]] name = "gix-status" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c6d2a8c521ffa205fe7e268c82e6d1378ba37cd826ca10ab6129fdc29a4b65" +checksum = "22042e385d28a34275e029d98f4970285045be14b9073658ca897923f2ed8700" dependencies = [ "bstr", "filetime", @@ -1544,9 +1451,9 @@ dependencies = [ [[package]] name = "gix-submodule" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd5fc8692890bd71a596e540fd4c364f8460eaa82c4eaaedebde6e1e3eb4d91" +checksum = "3059890ef054066c22a94bfc6a3eaba0d806aedcd630a0bc9e5783fd88884781" dependencies = [ "bstr", "gix-config", @@ -1559,9 +1466,9 @@ dependencies = [ [[package]] name = "gix-tempfile" -version = "23.0.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "691ea1e31435c7e7d4d04705ec9d1c0d9482c46b2acf512bc723939d8f0af7fb" +checksum = "27850097e1ff9515f46a0dad0f5f9c9d020e972727772dabab9450690c4adb22" dependencies = [ "dashmap", "gix-fs", @@ -1572,15 +1479,15 @@ dependencies = [ [[package]] name = "gix-trace" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f23569e55f2ffaf958617353b9734a7d52a7c19c439eeaa5e3efc217fd2270e" +checksum = "44dc45eae785c0eb14173e0f152e6e224dcf4d45b6a6999a3aed22af541ad678" [[package]] name = "gix-transport" -version = "0.57.0" +version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffd6a5c676b92d4ead5f5a2b2935024415dec69edc997b6090ca9cac010a3018" +checksum = "7cd0e34995b1aab0fa8dff2af8db726a0bfad3e119c89302604463264046e7ff" dependencies = [ "bstr", "gix-command", @@ -1594,9 +1501,9 @@ dependencies = [ [[package]] name = "gix-traverse" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a14b7052c0786676c03e71fcfde7d7f0f8e8316e642b5cec6bb3998719b2ce5c" +checksum = "e8de590ecc86a3b2870665f2288324fa9f7f8672c7fc2d4e020fdd81cd1f7aed" dependencies = [ "bitflags", "gix-commitgraph", @@ -1611,9 +1518,9 @@ dependencies = [ [[package]] name = "gix-url" -version = "0.36.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35842d099e813f6f6bba529e88d4670572149c3df79b7a412952259887721ece" +checksum = "65bb01ec69d55e82ccb7a19e264501ead4e6aac38463a8cebfdd81e22bb67ab2" dependencies = [ "bstr", "gix-path", @@ -1623,9 +1530,9 @@ dependencies = [ [[package]] name = "gix-utils" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e477b4f07a6e8da4ba791c53c858102959703c60d70f199932010d5b94adb2c" +checksum = "66c50966184123caf580ffa64e28031a878597f1c7fceb8fe19566c38eb1b771" dependencies = [ "bstr", "fastrand", @@ -1634,18 +1541,18 @@ dependencies = [ [[package]] name = "gix-validate" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e26ac2602b43eadfdca0560b81d3341944162a3c9f64ccdeef8fc501ad80dad5" +checksum = "7bc6fc771c4063ba7cd2f47b91fb6076251c6a823b64b7fe7b8874b0fe4afae3" dependencies = [ "bstr", ] [[package]] name = "gix-worktree" -version = "0.52.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69955eb5e2910832f88d041964b809eee01dadd579237e0b55efec58fd406fd" +checksum = "cef414ed275e8407cd5d53d301e83be19700b0dd3f859d2434417b58f454a2d1" dependencies = [ "bstr", "gix-attributes", @@ -1659,29 +1566,11 @@ dependencies = [ "gix-validate", ] -[[package]] -name = "gix-worktree-state" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a96dccbcf9e8fe0291c55f06e08da93ebb2e691c1311276f541eefcc6d70800" -dependencies = [ - "bstr", - "gix-features", - "gix-filter", - "gix-fs", - "gix-index", - "gix-object", - "gix-path", - "gix-worktree", - "io-close", - "thiserror", -] - [[package]] name = "gix-worktree-stream" -version = "0.32.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8444b8ed4662e1a0c97f3eceda29630001a1bbb2632201e50312623e594213" +checksum = "d25e9ed30100c63f7590bc581c225e53f731a53e06aa79a245739c07f7dcc557" dependencies = [ "gix-attributes", "gix-error", @@ -1751,9 +1640,14 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] [[package]] name = "heapless" @@ -1779,9 +1673,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "http" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" dependencies = [ "bytes", "itoa", @@ -1818,9 +1712,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -2017,7 +1911,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.17.0", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -2047,16 +1941,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "io-close" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cadcf447f06744f8ce713d2d6239bb5bde2c357a452397a9ed90c625da390bc" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "ipnet" version = "2.12.0" @@ -2086,9 +1970,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.24" +version = "0.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" +checksum = "4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -2096,14 +1980,14 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-sys 0.61.2", + "windows-link", ] [[package]] name = "jiff-static" -version = "0.2.24" +version = "0.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" +checksum = "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47" dependencies = [ "proc-macro2", "quote", @@ -2186,9 +2070,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ "cfg-if", "futures-util", @@ -2234,14 +2118,11 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libredox" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags", "libc", - "plain", - "redox_syscall 0.7.5", ] [[package]] @@ -2273,33 +2154,30 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -dependencies = [ - "sval", - "sval_ref", - "value-bag", -] +checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f" [[package]] name = "logforth" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c105c59828d07aeb95b06f9a345b12869ddc249d44a7302697a66da439076f" +checksum = "2e4e2fe7ac336b23115e94310225ee9fdc2aeeb6acde4e69959501d457680f6f" dependencies = [ + "log", "logforth-append-file", "logforth-bridge-log", "logforth-core", + "logforth-filter-rustlog", "logforth-layout-json", "logforth-layout-text", ] [[package]] name = "logforth-append-file" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d2ccb8b7e501c114e80069eb2b83c02a48039c23a7037e717b5b09a4ed306fb" +checksum = "80f4ed78a03a30c12285135d98330f0f5d53cb0019bd1ac6d66863dae72d8d52" dependencies = [ "jiff", "logforth-core", @@ -2307,9 +2185,9 @@ dependencies = [ [[package]] name = "logforth-bridge-log" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aa6ca548389fd166a995b5940e15b0dacbdd5a30f2f24eac9aa4bf664bda5c" +checksum = "c0dd095c3125c77ecd70093e964e0043489dc7344edbfaee604e4bc50f253a30" dependencies = [ "log", "logforth-core", @@ -2317,19 +2195,28 @@ dependencies = [ [[package]] name = "logforth-core" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77869b8dba38c67ed19e1753e59d9faefdcc60557bc4e84db0348606a304ac5" +checksum = "400ba5305e0cb6819efa6c2c503020562eb5b47fd53c91c935be55af1ffd374e" dependencies = [ "anyhow", - "value-bag", + "serde", +] + +[[package]] +name = "logforth-filter-rustlog" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e8431cfa1d3eeca479c363651320a66c7003350528f678b30e8c1474fb0d802" +dependencies = [ + "logforth-core", ] [[package]] name = "logforth-layout-json" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b80d310e0670560404a825f64dbd78a8761c5bb7da952513e90ba9dd525bd2" +checksum = "9d86a105f8f32151ca1e0a6d4097d478badb02d5715239ba0fa431a188a5d966" dependencies = [ "jiff", "logforth-core", @@ -2339,9 +2226,9 @@ dependencies = [ [[package]] name = "logforth-layout-text" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a4674e549a59eeac8e301584143186c433181bdc5460046a130becedef6a3d" +checksum = "4eafe007ac55293d807e8c7f5a23002e2518d32e476e195443cde23e7845416a" dependencies = [ "colored", "jiff", @@ -2388,9 +2275,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "maybe-async" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" +checksum = "746873a384ad60adc5db74471dfaba74bd278afbdcfd81db93fafcdfc8b5ca0c" dependencies = [ "proc-macro2", "quote", @@ -2399,18 +2286,18 @@ dependencies = [ [[package]] name = "mea" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6747f54621d156e1b47eb6b25f39a941b9fc347f98f67d25d8881ff99e8ed832" +checksum = "2640d335e7273dacdcf51044026139b2e269c3bb0dfc3f8cb3496b85e3f6a42c" dependencies = [ "slab", ] [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "memmap2" @@ -2429,9 +2316,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "log", @@ -2505,7 +2392,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] @@ -2518,18 +2405,18 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", @@ -2542,12 +2429,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - [[package]] name = "portable-atomic" version = "1.13.1" @@ -2746,15 +2627,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "redox_syscall" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" -dependencies = [ - "bitflags", -] - [[package]] name = "redox_users" version = "0.5.2" @@ -2768,9 +2640,9 @@ dependencies = [ [[package]] name = "reedline" -version = "0.47.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2066729dce9fecd28d1c6850a159ee68719130f149b22467c362353e16994e90" +checksum = "201e8e0160cbe7bb5eb2caccf281e178e77fac95115ab31a2c29edc5593603c8" dependencies = [ "chrono", "crossterm", @@ -2805,9 +2677,9 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ "base64", "bytes", @@ -2908,9 +2780,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -3005,7 +2877,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scopeql" -version = "0.5.1" +version = "0.6.0" dependencies = [ "anstyle", "anyhow", @@ -3086,15 +2958,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde_buf" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc948de1bbead18a61be0b33182636603ea0239ca2577b9704fc39eba900e4e5" -dependencies = [ - "serde_core", -] - [[package]] name = "serde_core" version = "1.0.228" @@ -3115,20 +2978,11 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_fmt" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e497af288b3b95d067a23a4f749f2861121ffcb2f6d8379310dcda040c345ed" -dependencies = [ - "serde_core", -] - [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "indexmap", "itoa", @@ -3188,9 +3042,9 @@ checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook" @@ -3265,9 +3119,9 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -3327,84 +3181,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "sval" -version = "2.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb9318255ebd817902d7e279d8f8e39b35b1b9954decd5eb9ea0e30e5fd2b6a" - -[[package]] -name = "sval_buffer" -version = "2.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12571299185e653fdb0fbfe36cd7f6529d39d4e747a60b15a3f34574b7b97c61" -dependencies = [ - "sval", - "sval_ref", -] - -[[package]] -name = "sval_dynamic" -version = "2.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39526f24e997706c0de7f03fb7371f7f5638b66a504ded508e20ad173d0a3677" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_fmt" -version = "2.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "933dd3bb26965d682280fcc49400ac2a05036f4ee1e6dbd61bf8402d5a5c3a54" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_json" -version = "2.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0cda08f6d5c9948024a6551077557b1fdcc3880ff2f20ae839667d2ec2d87ed" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_nested" -version = "2.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d49d5e6c1f9fd0e53515819b03a97ca4eb1bff5c8ee097c43391c09ecfb19f" -dependencies = [ - "sval", - "sval_buffer", - "sval_ref", -] - -[[package]] -name = "sval_ref" -version = "2.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f876c5a78405375b4e19cbb9554407513b59c93dea12dc6a4af4e1d30899ca" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_serde" -version = "2.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9ccd3b7f7200239a655e517dd3fd48d960b9111ad24bd6a5e055bef17607c7" -dependencies = [ - "serde_core", - "sval", - "sval_nested", -] - [[package]] name = "syn" version = "2.0.117" @@ -3517,9 +3293,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.2" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -3592,9 +3368,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", "serde_core", @@ -3637,9 +3413,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.10" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "bitflags", "bytes", @@ -3690,17 +3466,11 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicase" @@ -3731,9 +3501,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -3785,9 +3555,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -3795,43 +3565,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "value-bag" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0" -dependencies = [ - "value-bag-serde1", - "value-bag-sval2", -] - -[[package]] -name = "value-bag-serde1" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16530907bfe2999a1773ca5900a65101e092c70f642f25cc23ca0c43573262c5" -dependencies = [ - "erased-serde", - "serde_buf", - "serde_core", - "serde_fmt", -] - -[[package]] -name = "value-bag-sval2" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00ae130edd690eaa877e4f40605d534790d1cf1d651e7685bd6a144521b251f" -dependencies = [ - "sval", - "sval_buffer", - "sval_dynamic", - "sval_fmt", - "sval_json", - "sval_ref", - "sval_serde", -] - [[package]] name = "version_check" version = "0.9.5" @@ -3892,9 +3625,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -3905,9 +3638,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" dependencies = [ "js-sys", "wasm-bindgen", @@ -3915,9 +3648,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3925,9 +3658,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -3938,9 +3671,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] @@ -3981,9 +3714,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" dependencies = [ "js-sys", "wasm-bindgen", @@ -4285,9 +4018,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] @@ -4425,18 +4158,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", @@ -4445,9 +4178,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] diff --git a/scopeql/Cargo.toml b/scopeql/Cargo.toml index e80f3cb..46814de 100644 --- a/scopeql/Cargo.toml +++ b/scopeql/Cargo.toml @@ -14,7 +14,7 @@ [package] name = "scopeql" -version = "0.5.1" +version = "0.6.0" categories = ["database"] description = "A command-line interface for ScopeDB" @@ -44,11 +44,11 @@ hex = { version = "0.4.3" } indicatif = { version = "0.18" } jiff = { version = "0.2", features = ["serde"] } log = { version = "0.4.29" } -logforth = { version = "0.29.1", features = ["starter-log"] } +logforth = { version = "0.30.0", features = ["starter-log"] } mea = { version = "0.6.3" } memchr = { version = "2.7.6" } nu-ansi-term = { version = "0.50" } -reedline = { version = "0.47.0" } +reedline = { version = "0.48.0" } reqwest = { version = "0.13.2", default-features = false, features = [ "json", "default-tls", @@ -69,7 +69,7 @@ toml_edit = { version = "0.25.1", features = ["serde"] } uuid = { version = "1.20.0", features = ["v7", "serde"] } [build-dependencies] -gix = { version = "0.83.0", default-features = false, features = [ +gix = { version = "0.84.0", default-features = false, features = [ "sha1", "status", ] } diff --git a/scopeql/src/main.rs b/scopeql/src/main.rs index b078858..51baa57 100644 --- a/scopeql/src/main.rs +++ b/scopeql/src/main.rs @@ -18,7 +18,7 @@ use std::num::NonZeroUsize; use clap::Parser; use logforth::append::file::FileBuilder; -use logforth::filter::env_filter::EnvFilterBuilder; +use logforth::filter::rustlog::RustLogFilterBuilder; use logforth::layout::JsonLayout; use crate::command::Command; @@ -121,7 +121,7 @@ fn setup_logger() { logforth::starter_log::builder() .dispatch(|b| { - b.filter(EnvFilterBuilder::from_default_env_or("info").build()) + b.filter(RustLogFilterBuilder::from_default_env_or("info").build()) .append(append) }) .apply();