11// Copyright 2025 Dotanuki Labs
22// SPDX-License-Identifier: MIT
33
4+ use crate :: core:: CrateVeracityLevel :: NotAvailable ;
45use crate :: infra:: {
56 CachedVeracityEvaluator , CrateBuildReproducibilityEvaluator , CrateProvenanceEvaluator , VeracityEvaluationStorage ,
67} ;
78use std:: fmt:: Display ;
9+ use std:: time:: Duration ;
10+ use tokio:: time:: sleep;
811
912#[ derive( Clone , Debug , PartialEq ) ]
1013pub struct CargoPackage {
@@ -95,8 +98,8 @@ impl CombinedVeracityEvaluator {
9598 }
9699
97100 async fn evaluate_two_veracity_factors ( & self , crate_info : & CargoPackage ) -> anyhow:: Result < CrateVeracityLevel > {
98- let has_provenance = self . provenance . evaluate ( crate_info) . await ?;
99101 let has_reproduced_build = self . reproducibility . evaluate ( crate_info) . await ?;
102+ let has_provenance = self . provenance . evaluate ( crate_info) . await ?;
100103
101104 let veracity_level = CrateVeracityLevel :: from_booleans ( has_provenance, has_reproduced_build) ;
102105 self . cache . save ( crate_info, veracity_level. clone ( ) ) ?;
@@ -108,6 +111,8 @@ impl CombinedVeracityEvaluator {
108111 existing_factor : VeracityFactor ,
109112 crate_info : & CargoPackage ,
110113 ) -> anyhow:: Result < CrateVeracityLevel > {
114+ sleep ( Duration :: from_millis ( 1000 ) ) . await ;
115+
111116 let found_additional_factor = match existing_factor {
112117 VeracityFactor :: ReproducibleBuilds => self . provenance . evaluate ( crate_info) . await ?,
113118 VeracityFactor :: ProvenanceAttested => self . reproducibility . evaluate ( crate_info) . await ?,
@@ -126,14 +131,29 @@ impl CombinedVeracityEvaluator {
126131}
127132
128133impl CrateVeracityEvaluation for CombinedVeracityEvaluator {
129- async fn evaluate ( & self , crate_info : & CargoPackage ) -> anyhow:: Result < CrateVeracityLevel > {
130- let cached_veracity = self . cache . read ( crate_info) . unwrap_or ( CrateVeracityLevel :: NotAvailable ) ;
134+ async fn evaluate ( & self , cargo_package : & CargoPackage ) -> anyhow:: Result < CrateVeracityLevel > {
135+ let cached_veracity = self . cache . read ( cargo_package) . unwrap_or ( NotAvailable ) ;
136+
137+ let new_evaluation = match & cached_veracity {
138+ CrateVeracityLevel :: NotAvailable => self . evaluate_two_veracity_factors ( cargo_package) . await ,
139+ CrateVeracityLevel :: SingleFactor ( factor) => {
140+ self . evaluate_missing_veracity_factor ( factor. clone ( ) , cargo_package)
141+ . await
142+ } ,
143+ CrateVeracityLevel :: TwoFactors => Ok ( cached_veracity. clone ( ) ) ,
144+ } ;
131145
132- match cached_veracity {
133- CrateVeracityLevel :: NotAvailable => self . evaluate_two_veracity_factors ( crate_info) . await ,
134- CrateVeracityLevel :: SingleFactor ( factor) => self . evaluate_missing_veracity_factor ( factor, crate_info) . await ,
135- CrateVeracityLevel :: TwoFactors => Ok ( cached_veracity) ,
146+ if new_evaluation. is_ok ( ) {
147+ return new_evaluation;
136148 }
149+
150+ log:: info!(
151+ "[pollux.core] failed to evaluate {} | reason = {}; defaulting to cache" ,
152+ cargo_package,
153+ new_evaluation. unwrap_err( )
154+ ) ;
155+ log:: info!( "[pollux.core] using cached veracity evaluation for {}" , cargo_package) ;
156+ Ok ( cached_veracity)
137157 }
138158}
139159
0 commit comments