@@ -12,9 +12,12 @@ use soar_core::{
1212 package:: query:: PackageQuery ,
1313 SoarResult ,
1414} ;
15- use soar_db:: repository:: {
16- core:: { CoreRepository , SortDirection } ,
17- metadata:: MetadataRepository ,
15+ use soar_db:: {
16+ models:: metadata:: PackageListing ,
17+ repository:: {
18+ core:: { CoreRepository , SortDirection } ,
19+ metadata:: MetadataRepository ,
20+ } ,
1821} ;
1922use soar_utils:: fs:: dir_size;
2023use tabled:: {
@@ -367,31 +370,39 @@ pub async fn query_package(query_str: String) -> SoarResult<()> {
367370 Ok ( ( ) )
368371}
369372
373+ /// Lightweight struct for listing with repo name attached
374+ struct PackageListingWithRepo {
375+ repo_name : String ,
376+ pkg : PackageListing ,
377+ }
378+
370379pub async fn list_packages ( repo_name : Option < String > ) -> SoarResult < ( ) > {
371380 let state = AppState :: new ( ) ;
372381 let metadata_mgr = state. metadata_manager ( ) . await ?;
373382 let diesel_db = state. diesel_core_db ( ) ?;
374383
375- let packages: Vec < Package > = if let Some ( ref repo_name) = repo_name {
384+ let packages: Vec < PackageListingWithRepo > = if let Some ( ref repo_name) = repo_name {
376385 metadata_mgr
377- . query_repo ( repo_name, MetadataRepository :: list_all ) ?
386+ . query_repo ( repo_name, MetadataRepository :: list_all_minimal ) ?
378387 . unwrap_or_default ( )
379388 . into_iter ( )
380- . map ( |p| {
381- let mut pkg: Package = p. into ( ) ;
382- pkg. repo_name = repo_name. clone ( ) ;
383- pkg
389+ . map ( |pkg| {
390+ PackageListingWithRepo {
391+ repo_name : repo_name. clone ( ) ,
392+ pkg,
393+ }
384394 } )
385395 . collect ( )
386396 } else {
387397 metadata_mgr. query_all_flat ( |repo_name, conn| {
388- let pkgs = MetadataRepository :: list_all ( conn) ?;
398+ let pkgs = MetadataRepository :: list_all_minimal ( conn) ?;
389399 Ok ( pkgs
390400 . into_iter ( )
391- . map ( |p| {
392- let mut pkg: Package = p. into ( ) ;
393- pkg. repo_name = repo_name. to_string ( ) ;
394- pkg
401+ . map ( |pkg| {
402+ PackageListingWithRepo {
403+ repo_name : repo_name. to_string ( ) ,
404+ pkg,
405+ }
395406 } )
396407 . collect ( ) )
397408 } ) ?
@@ -409,11 +420,11 @@ pub async fn list_packages(repo_name: Option<String>) -> SoarResult<()> {
409420 let mut installed_count = 0 ;
410421 let mut available_count = 0 ;
411422
412- for package in & packages {
423+ for entry in & packages {
413424 let key = (
414- package . repo_name . clone ( ) ,
415- package . pkg_id . clone ( ) ,
416- package . pkg_name . clone ( ) ,
425+ entry . repo_name . clone ( ) ,
426+ entry . pkg . pkg_id . clone ( ) ,
427+ entry . pkg . pkg_name . clone ( ) ,
417428 ) ;
418429 let state_icon = match installed_pkgs. get ( & key) {
419430 Some ( is_installed) => {
@@ -431,25 +442,27 @@ pub async fn list_packages(repo_name: Option<String>) -> SoarResult<()> {
431442 } ;
432443
433444 info ! (
434- pkg_name = package . pkg_name,
435- pkg_id = package . pkg_id,
436- repo_name = package . repo_name,
437- pkg_type = package . pkg_type,
438- version = package . version,
439- version_upstream = package . version_upstream,
445+ pkg_name = entry . pkg . pkg_name,
446+ pkg_id = entry . pkg . pkg_id,
447+ repo_name = entry . repo_name,
448+ pkg_type = entry . pkg . pkg_type,
449+ version = entry . pkg . version,
450+ version_upstream = entry . pkg . version_upstream,
440451 "[{}] {}#{}:{} | {}{} | {}" ,
441452 state_icon,
442- Colored ( Blue , & package. pkg_name) ,
443- Colored ( Cyan , & package. pkg_id) ,
444- Colored ( Cyan , & package. repo_name) ,
445- Colored ( LightRed , & package. version) ,
446- package
453+ Colored ( Blue , & entry. pkg. pkg_name) ,
454+ Colored ( Cyan , & entry. pkg. pkg_id) ,
455+ Colored ( Cyan , & entry. repo_name) ,
456+ Colored ( LightRed , & entry. pkg. version) ,
457+ entry
458+ . pkg
447459 . version_upstream
448460 . as_ref( )
449- . filter( |_| package . version. starts_with( "HEAD" ) )
461+ . filter( |_| entry . pkg . version. starts_with( "HEAD" ) )
450462 . map( |upstream| format!( ":{}" , Colored ( Yellow , & upstream) ) )
451463 . unwrap_or_default( ) ,
452- package
464+ entry
465+ . pkg
453466 . pkg_type
454467 . as_ref( )
455468 . map( |pkg_type| format!( "{}" , Colored ( Magenta , & pkg_type) ) )
0 commit comments