@@ -344,15 +344,15 @@ fn resolve_packages(
344344 . map ( |p| ( p. pkg_id , p. repo_name , p. version ) )
345345 . collect ( ) ;
346346
347- let pkg = if repo_pkgs . len ( ) > 1 {
348- select_package_interactively_with_installed (
349- repo_pkgs,
350- & query. name . clone ( ) . unwrap_or ( package. clone ( ) ) ,
351- & installed_packages,
352- ) ?
353- . unwrap ( )
354- } else {
355- repo_pkgs . into_iter ( ) . next ( ) . unwrap ( )
347+ // Always show interactive selection when --show is used
348+ let pkg = select_package_interactively_with_installed (
349+ repo_pkgs,
350+ & query. name . clone ( ) . unwrap_or ( package. clone ( ) ) ,
351+ & installed_packages,
352+ ) ? ;
353+
354+ let Some ( pkg ) = pkg else {
355+ continue ;
356356 } ;
357357
358358 // Check if this specific package is already installed
@@ -730,9 +730,9 @@ fn select_package(
730730 yes : bool ,
731731 existing_install : & Option < soar_core:: database:: models:: InstalledPackage > ,
732732) -> SoarResult < Option < Package > > {
733- // If we have an existing install, use its details to find the package
733+ // If we have an existing install, try to find it in its original repo first
734734 let packages: Vec < Package > = if let Some ( existing) = existing_install {
735- metadata_mgr
735+ let existing_pkgs : Vec < Package > = metadata_mgr
736736 . query_repo ( & existing. repo_name , |conn| {
737737 MetadataRepository :: find_filtered (
738738 conn,
@@ -750,7 +750,32 @@ fn select_package(
750750 pkg. repo_name = existing. repo_name . clone ( ) ;
751751 pkg
752752 } )
753- . collect ( )
753+ . collect ( ) ;
754+
755+ // If package not found in original repo (repo removed or package removed),
756+ // fall back to searching all repos by package name
757+ if existing_pkgs. is_empty ( ) {
758+ metadata_mgr. query_all_flat ( |repo_name, conn| {
759+ let pkgs = MetadataRepository :: find_filtered (
760+ conn,
761+ query. name . as_deref ( ) ,
762+ query. pkg_id . as_deref ( ) ,
763+ query. version . as_deref ( ) ,
764+ None ,
765+ None ,
766+ ) ?;
767+ Ok ( pkgs
768+ . into_iter ( )
769+ . map ( |p| {
770+ let mut pkg: Package = p. into ( ) ;
771+ pkg. repo_name = repo_name. to_string ( ) ;
772+ pkg
773+ } )
774+ . collect ( ) )
775+ } ) ?
776+ } else {
777+ existing_pkgs
778+ }
754779 } else if let Some ( ref repo_name) = query. repo_name {
755780 metadata_mgr
756781 . query_repo ( repo_name, |conn| {
0 commit comments