From 692a403a7e6919789436889b42a65c78fe9c2311 Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Fri, 29 Aug 2025 14:24:19 -0300 Subject: [PATCH] fix: make id mandatory for delete and optional for get/info Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) --- src/args.rs | 1 - src/modes/get.rs | 4 +++- src/modes/info.rs | 11 ++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/args.rs b/src/args.rs index 944c26d..332c2d0 100644 --- a/src/args.rs +++ b/src/args.rs @@ -55,7 +55,6 @@ pub struct ModeArgs { #[arg(help( "Get an item either by it's ID or by a combination of matching tags and metatdata" ))] - #[arg(requires = "ids_or_tags")] pub info: bool, #[arg(group("mode"), help_heading("Mode Options"), short('S'), long, conflicts_with_all(["save", "get", "diff", "list", "delete", "info", "server"]))] diff --git a/src/modes/get.rs b/src/modes/get.rs index 3b18c34..e4073fa 100644 --- a/src/modes/get.rs +++ b/src/modes/get.rs @@ -17,7 +17,9 @@ pub fn mode_get( conn: &mut rusqlite::Connection, data_path: PathBuf, ) -> Result<()> { - if !ids.is_empty() && !tags.is_empty() { + if ids.is_empty() && tags.is_empty() { + cmd.error(clap::error::ErrorKind::InvalidValue, "No ID or tags given, you must supply exactly one ID or at least one tag when using --get").exit(); + } else if !ids.is_empty() && !tags.is_empty() { cmd.error(clap::error::ErrorKind::InvalidValue, "Both ID and tags given, you must supply exactly one ID or at least one tag when using --get").exit(); } else if ids.len() > 1 { cmd.error(clap::error::ErrorKind::InvalidValue, "More than one ID given, you must supply exactly one ID or at least one tag when using --get").exit(); diff --git a/src/modes/info.rs b/src/modes/info.rs index 4f07ae9..989450d 100644 --- a/src/modes/info.rs +++ b/src/modes/info.rs @@ -25,16 +25,21 @@ pub fn mode_info( data_path: PathBuf, ) -> Result<()> { // For --info, we only use IDs, tags should be empty - if ids.is_empty() { - cmd.error(ErrorKind::InvalidValue, "No ID provided for --info").exit(); + if ids.is_empty() && !_tags.is_empty() { + cmd.error(ErrorKind::InvalidValue, "Tags are not supported for --info, only IDs").exit(); } else if ids.len() > 1 { cmd.error(ErrorKind::InvalidValue, "More than one ID given, you must supply exactly one ID when using --info").exit(); + } else if ids.is_empty() { + // If no ID is provided, find the last item + // This matches the behavior in find_item when (true, true) + // Clear the ids vector to ensure find_item uses the last item + ids.clear(); } let item_service = ItemService::new(data_path.clone()); // Use empty tags vector since --info only works with IDs let item_with_meta = item_service - .find_item(conn, ids, &Vec::new(), &std::collections::HashMap::new()) + .find_item(conn, ids, _tags, &std::collections::HashMap::new()) .map_err(|e| anyhow!("Unable to find matching item in database: {}", e))?; show_item(item_with_meta, settings, data_path)