@@ -7,7 +7,7 @@ use crate::runner::tasks::TaskCtx;
7
7
use crate :: runner:: OverrideResult ;
8
8
use anyhow:: Error ;
9
9
use cargo_metadata:: diagnostic:: DiagnosticLevel ;
10
- use cargo_metadata:: { Message , Metadata , Package , Target } ;
10
+ use cargo_metadata:: { Message , Metadata , Package , Resolve , Target } ;
11
11
use docsrs_metadata:: Metadata as DocsrsMetadata ;
12
12
use remove_dir_all:: remove_dir_all;
13
13
use rustwide:: cmd:: { CommandError , MountKind , ProcessLinesActions , SandboxBuilder } ;
@@ -48,24 +48,37 @@ pub(super) fn detect_broken<T>(res: Result<T, Error>) -> Result<T, Error> {
48
48
match res {
49
49
Ok ( ok) => Ok ( ok) ,
50
50
Err ( err) => {
51
- let mut reason = None ;
52
-
53
51
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
+ } ;
63
77
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) ) ) ;
68
79
}
80
+
81
+ Err ( err)
69
82
}
70
83
}
71
84
}
0 commit comments