@@ -7,7 +7,7 @@ use crate::runner::tasks::TaskCtx;
77use  crate :: runner:: OverrideResult ; 
88use  anyhow:: Error ; 
99use  cargo_metadata:: diagnostic:: DiagnosticLevel ; 
10- use  cargo_metadata:: { Message ,  Metadata ,  Package ,  Target } ; 
10+ use  cargo_metadata:: { Message ,  Metadata ,  Package ,  Resolve ,   Target } ; 
1111use  docsrs_metadata:: Metadata  as  DocsrsMetadata ; 
1212use  remove_dir_all:: remove_dir_all; 
1313use  rustwide:: cmd:: { CommandError ,  MountKind ,  ProcessLinesActions ,  SandboxBuilder } ; 
@@ -48,24 +48,37 @@ pub(super) fn detect_broken<T>(res: Result<T, Error>) -> Result<T, Error> {
4848    match  res { 
4949        Ok ( ok)  => Ok ( ok) , 
5050        Err ( err)  => { 
51-             let  mut  reason = None ; 
52- 
5351            if  let  Some ( error)  = err. downcast_ref ( )  { 
54-                 reason = match  * error { 
55-                     PrepareError :: MissingCargoToml  => Some ( BrokenReason :: CargoToml ) , 
56-                     PrepareError :: InvalidCargoTomlSyntax  => Some ( BrokenReason :: CargoToml ) , 
57-                     PrepareError :: YankedDependencies ( _)  => Some ( BrokenReason :: Yanked ) , 
58-                     PrepareError :: MissingDependencies ( _)  => Some ( BrokenReason :: MissingDependencies ) , 
59-                     PrepareError :: PrivateGitRepository  => Some ( BrokenReason :: MissingGitRepository ) , 
60-                     _ => None , 
61-                 } 
62-             } 
52+                 let  reason = match  * error { 
53+                     PrepareError :: MissingCargoToml  => { 
54+                         TestResult :: BrokenCrate ( BrokenReason :: CargoToml ) 
55+                     } 
56+                     PrepareError :: InvalidCargoTomlSyntax  => { 
57+                         TestResult :: BrokenCrate ( BrokenReason :: CargoToml ) 
58+                     } 
59+                     PrepareError :: YankedDependencies ( _)  => { 
60+                         TestResult :: BrokenCrate ( BrokenReason :: Yanked ) 
61+                     } 
62+                     PrepareError :: MissingDependencies ( _)  => { 
63+                         TestResult :: BrokenCrate ( BrokenReason :: MissingDependencies ) 
64+                     } 
65+                     PrepareError :: PrivateGitRepository  => { 
66+                         TestResult :: BrokenCrate ( BrokenReason :: MissingGitRepository ) 
67+                     } 
68+                     _ => { 
69+                         let  reason = failure_reason ( & err) ; 
70+                         if  reason. is_spurious ( )  || matches ! ( reason,  FailureReason :: Unknown )  { 
71+                             TestResult :: PrepareFail ( reason) 
72+                         }  else  { 
73+                             TestResult :: BrokenCrate ( BrokenReason :: Unknown ) 
74+                         } 
75+                     } 
76+                 } ; 
6377
64-             if  let  Some ( reason)  = reason { 
65-                 Err ( err. context ( OverrideResult ( TestResult :: BrokenCrate ( reason) ) ) ) 
66-             }  else  { 
67-                 Err ( err) 
78+                 return  Err ( err. context ( OverrideResult ( reason) ) ) ; 
6879            } 
80+ 
81+             Err ( err) 
6982        } 
7083    } 
7184} 
0 commit comments