1
- use crate :: cmd:: Command ;
1
+ use crate :: cmd:: { Command , CommandError } ;
2
2
use crate :: { build:: CratePatch , Crate , Toolchain , Workspace } ;
3
3
use anyhow:: Context as _;
4
4
use log:: info;
@@ -113,7 +113,8 @@ impl<'a> Prepare<'a> {
113
113
. args ( & [ "-Zno-index-update" ] )
114
114
. env ( "__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS" , "nightly" ) ;
115
115
}
116
- let res = cmd
116
+
117
+ match cmd
117
118
. cd ( self . source_dir )
118
119
. process_lines ( & mut |line, _| {
119
120
if line. contains ( "failed to select a version for the requirement" ) {
@@ -124,17 +125,17 @@ impl<'a> Prepare<'a> {
124
125
missing_deps = true ;
125
126
}
126
127
} )
127
- . run ( ) ;
128
- match res {
129
- Err ( _) if yanked_deps => {
130
- return Err ( PrepareError :: YankedDependencies . into ( ) ) ;
128
+ . run_capture ( )
129
+ {
130
+ Ok ( _) => Ok ( ( ) ) ,
131
+ Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if yanked_deps => {
132
+ Err ( PrepareError :: YankedDependencies ( stderr) . into ( ) )
131
133
}
132
- Err ( _ ) if missing_deps => {
133
- return Err ( PrepareError :: MissingDependencies . into ( ) ) ;
134
+ Err ( CommandError :: ExecutionFailed { status : _ , stderr } ) if missing_deps => {
135
+ Err ( PrepareError :: MissingDependencies ( stderr ) . into ( ) )
134
136
}
135
- other => other? ,
137
+ Err ( err ) => Err ( err . into ( ) ) ,
136
138
}
137
- Ok ( ( ) )
138
139
}
139
140
140
141
fn fetch_deps ( & mut self ) -> anyhow:: Result < ( ) > {
@@ -161,17 +162,20 @@ pub(crate) fn fetch_deps(
161
162
for target in fetch_build_std_targets {
162
163
cmd = cmd. args ( & [ "--target" , target] ) ;
163
164
}
164
- let res = cmd
165
+
166
+ match cmd
165
167
. process_lines ( & mut |line, _| {
166
168
if line. contains ( "failed to load source for dependency" ) {
167
169
missing_deps = true ;
168
170
}
169
171
} )
170
- . run ( ) ;
171
- match res {
172
+ . run_capture ( )
173
+ {
172
174
Ok ( _) => Ok ( ( ) ) ,
173
- Err ( _) if missing_deps => Err ( PrepareError :: MissingDependencies . into ( ) ) ,
174
- err => err. map_err ( |e| e. into ( ) ) ,
175
+ Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if missing_deps => {
176
+ Err ( PrepareError :: MissingDependencies ( stderr) . into ( ) )
177
+ }
178
+ Err ( err) => Err ( err. into ( ) ) ,
175
179
}
176
180
}
177
181
@@ -381,11 +385,11 @@ pub enum PrepareError {
381
385
#[ error( "invalid Cargo.toml syntax" ) ]
382
386
InvalidCargoTomlSyntax ,
383
387
/// Some of this crate's dependencies were yanked, preventing Crater from fetching them.
384
- #[ error( "the crate depends on yanked dependencies" ) ]
385
- YankedDependencies ,
388
+ #[ error( "the crate depends on yanked dependencies: \n \n {0} " ) ]
389
+ YankedDependencies ( String ) ,
386
390
/// Some of the dependencies do not exist anymore.
387
- #[ error( "the crate depends on missing dependencies" ) ]
388
- MissingDependencies ,
391
+ #[ error( "the crate depends on missing dependencies: \n \n {0} " ) ]
392
+ MissingDependencies ( String ) ,
389
393
}
390
394
391
395
#[ cfg( test) ]
0 commit comments