@@ -103,6 +103,7 @@ impl<'a> Prepare<'a> {
103
103
104
104
let mut yanked_deps = false ;
105
105
let mut missing_deps = false ;
106
+ let mut broken_deps = false ;
106
107
let mut cmd = Command :: new ( self . workspace , self . toolchain . cargo ( ) ) . args ( & [
107
108
"generate-lockfile" ,
108
109
"--manifest-path" ,
@@ -123,6 +124,8 @@ impl<'a> Prepare<'a> {
123
124
|| line. contains ( "no matching package named" )
124
125
{
125
126
missing_deps = true ;
127
+ } else if line. contains ( "failed to parse manifest at" ) {
128
+ broken_deps = true ;
126
129
}
127
130
} )
128
131
. run_capture ( )
@@ -134,6 +137,9 @@ impl<'a> Prepare<'a> {
134
137
Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if missing_deps => {
135
138
Err ( PrepareError :: MissingDependencies ( stderr) . into ( ) )
136
139
}
140
+ Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if broken_deps => {
141
+ Err ( PrepareError :: InvalidCargoTomlSyntaxInDependencies ( stderr) . into ( ) )
142
+ }
137
143
Err ( err) => Err ( err. into ( ) ) ,
138
144
}
139
145
}
@@ -150,6 +156,7 @@ pub(crate) fn fetch_deps(
150
156
fetch_build_std_targets : & [ & str ] ,
151
157
) -> anyhow:: Result < ( ) > {
152
158
let mut missing_deps = false ;
159
+ let mut broken_deps = false ;
153
160
let mut cmd = Command :: new ( workspace, toolchain. cargo ( ) )
154
161
. args ( & [ "fetch" , "--manifest-path" , "Cargo.toml" ] )
155
162
. cd ( source_dir) ;
@@ -168,13 +175,19 @@ pub(crate) fn fetch_deps(
168
175
if line. contains ( "failed to load source for dependency" ) {
169
176
missing_deps = true ;
170
177
}
178
+ if line. contains ( "failed to parse manifest at" ) {
179
+ broken_deps = true ;
180
+ }
171
181
} )
172
182
. run_capture ( )
173
183
{
174
184
Ok ( _) => Ok ( ( ) ) ,
175
185
Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if missing_deps => {
176
186
Err ( PrepareError :: MissingDependencies ( stderr) . into ( ) )
177
187
}
188
+ Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if broken_deps => {
189
+ Err ( PrepareError :: InvalidCargoTomlSyntaxInDependencies ( stderr) . into ( ) )
190
+ }
178
191
Err ( err) => Err ( err. into ( ) ) ,
179
192
}
180
193
}
@@ -384,6 +397,10 @@ pub enum PrepareError {
384
397
/// rejecting it.
385
398
#[ error( "invalid Cargo.toml syntax" ) ]
386
399
InvalidCargoTomlSyntax ,
400
+ /// A dependencies Cargo.toml is invalid, either due to a TOML syntax error in it or cargo
401
+ /// rejecting it.
402
+ #[ error( "invalid Cargo.toml syntax in dependencies:\n \n {0}" ) ]
403
+ InvalidCargoTomlSyntaxInDependencies ( String ) ,
387
404
/// Some of this crate's dependencies were yanked, preventing Crater from fetching them.
388
405
#[ error( "the crate depends on yanked dependencies: \n \n {0}" ) ]
389
406
YankedDependencies ( String ) ,
0 commit comments