@@ -546,6 +546,44 @@ def filter_repos(repos: list[str], exclude_patterns: list[str]) -> list[str]:
546546 return filtered
547547
548548
549+ def _build_crate_result (
550+ crate_name : str ,
551+ version : str ,
552+ crate_meta : dict [str , Any ],
553+ ) -> dict [str , Any ]:
554+ """Build a crate component dict from parsed name/version and cache metadata."""
555+ result : dict [str , Any ] = {
556+ "name" : crate_name ,
557+ "version" : version ,
558+ "purl" : f"pkg:cargo/{ crate_name } @{ version } " ,
559+ "type" : "library" ,
560+ "source" : "crates.io" ,
561+ }
562+ if crate_meta .get ("license" ):
563+ result ["license" ] = crate_meta ["license" ]
564+ if crate_meta .get ("description" ):
565+ result ["description" ] = crate_meta ["description" ]
566+ if crate_meta .get ("supplier" ):
567+ result ["supplier" ] = crate_meta ["supplier" ]
568+ if crate_meta .get ("cpe" ):
569+ result ["cpe" ] = crate_meta ["cpe" ]
570+ if crate_meta .get ("aliases" ):
571+ result ["aliases" ] = crate_meta ["aliases" ]
572+ if crate_meta .get ("pedigree_ancestors" ):
573+ result ["pedigree_ancestors" ] = crate_meta ["pedigree_ancestors" ]
574+ if crate_meta .get ("pedigree_descendants" ):
575+ result ["pedigree_descendants" ] = crate_meta ["pedigree_descendants" ]
576+ if crate_meta .get ("pedigree_variants" ):
577+ result ["pedigree_variants" ] = crate_meta ["pedigree_variants" ]
578+ if crate_meta .get ("pedigree_notes" ):
579+ result ["pedigree_notes" ] = crate_meta ["pedigree_notes" ]
580+ if crate_meta .get ("repository" ):
581+ result ["url" ] = crate_meta ["repository" ]
582+ if crate_meta .get ("checksum" ):
583+ result ["checksum" ] = crate_meta ["checksum" ]
584+ return result
585+
586+
549587def resolve_component (
550588 repo_name : str , metadata : dict [str , Any ]
551589) -> dict [str , Any ] | None :
@@ -711,37 +749,7 @@ def resolve_component(
711749 crate_meta = cached_crates .get (crate_name ) or cached_crates .get (
712750 crate_name .replace ("-" , "_" ), {}
713751 )
714-
715- result = {
716- "name" : crate_name ,
717- "version" : version ,
718- "purl" : f"pkg:cargo/{ crate_name } @{ version } " ,
719- "type" : "library" ,
720- "source" : "crates.io" ,
721- }
722- if crate_meta .get ("license" ):
723- result ["license" ] = crate_meta ["license" ]
724- if crate_meta .get ("description" ):
725- result ["description" ] = crate_meta ["description" ]
726- if crate_meta .get ("supplier" ):
727- result ["supplier" ] = crate_meta ["supplier" ]
728- if crate_meta .get ("cpe" ):
729- result ["cpe" ] = crate_meta ["cpe" ]
730- if crate_meta .get ("aliases" ):
731- result ["aliases" ] = crate_meta ["aliases" ]
732- if crate_meta .get ("pedigree_ancestors" ):
733- result ["pedigree_ancestors" ] = crate_meta ["pedigree_ancestors" ]
734- if crate_meta .get ("pedigree_descendants" ):
735- result ["pedigree_descendants" ] = crate_meta ["pedigree_descendants" ]
736- if crate_meta .get ("pedigree_variants" ):
737- result ["pedigree_variants" ] = crate_meta ["pedigree_variants" ]
738- if crate_meta .get ("pedigree_notes" ):
739- result ["pedigree_notes" ] = crate_meta ["pedigree_notes" ]
740- if crate_meta .get ("repository" ):
741- result ["url" ] = crate_meta ["repository" ]
742- if crate_meta .get ("checksum" ):
743- result ["checksum" ] = crate_meta ["checksum" ]
744- return result
752+ return _build_crate_result (crate_name , version , crate_meta )
745753
746754 # Handle legacy crate universe format (e.g., crates_io__tokio-1.10.0)
747755 if repo_name .startswith ("crates_io__" ) or "_crates__" in repo_name :
@@ -759,37 +767,7 @@ def resolve_component(
759767 crate_meta = cached_crates .get (crate_name ) or cached_crates .get (
760768 crate_name .replace ("-" , "_" ), {}
761769 )
762-
763- result = {
764- "name" : crate_name ,
765- "version" : version ,
766- "purl" : f"pkg:cargo/{ crate_name } @{ version } " ,
767- "type" : "library" ,
768- "source" : "crates.io" ,
769- }
770- if crate_meta .get ("license" ):
771- result ["license" ] = crate_meta ["license" ]
772- if crate_meta .get ("description" ):
773- result ["description" ] = crate_meta ["description" ]
774- if crate_meta .get ("supplier" ):
775- result ["supplier" ] = crate_meta ["supplier" ]
776- if crate_meta .get ("cpe" ):
777- result ["cpe" ] = crate_meta ["cpe" ]
778- if crate_meta .get ("aliases" ):
779- result ["aliases" ] = crate_meta ["aliases" ]
780- if crate_meta .get ("pedigree_ancestors" ):
781- result ["pedigree_ancestors" ] = crate_meta ["pedigree_ancestors" ]
782- if crate_meta .get ("pedigree_descendants" ):
783- result ["pedigree_descendants" ] = crate_meta ["pedigree_descendants" ]
784- if crate_meta .get ("pedigree_variants" ):
785- result ["pedigree_variants" ] = crate_meta ["pedigree_variants" ]
786- if crate_meta .get ("pedigree_notes" ):
787- result ["pedigree_notes" ] = crate_meta ["pedigree_notes" ]
788- if crate_meta .get ("repository" ):
789- result ["url" ] = crate_meta ["repository" ]
790- if crate_meta .get ("checksum" ):
791- result ["checksum" ] = crate_meta ["checksum" ]
792- return result
770+ return _build_crate_result (crate_name , version , crate_meta )
793771
794772 # Check if repo is a sub-library of a known parent (e.g., boost.config+ -> boost)
795773 # rules_boost splits Boost into individual repos like boost.config+, boost.assert+, etc.
0 commit comments