1- use crate :: cmd:: { Command , CommandError } ;
1+ use crate :: cmd:: { Command , CommandError , ProcessLinesActions } ;
22use crate :: { build:: CratePatch , Crate , Toolchain , Workspace } ;
33use anyhow:: Context as _;
44use log:: info;
@@ -101,8 +101,6 @@ impl<'a> Prepare<'a> {
101101 return Ok ( ( ) ) ;
102102 }
103103
104- let mut yanked_deps = false ;
105- let mut missing_deps = false ;
106104 let mut cmd = Command :: new ( self . workspace , self . toolchain . cargo ( ) ) . args ( & [
107105 "generate-lockfile" ,
108106 "--manifest-path" ,
@@ -114,28 +112,7 @@ impl<'a> Prepare<'a> {
114112 . env ( "__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS" , "nightly" ) ;
115113 }
116114
117- match cmd
118- . cd ( self . source_dir )
119- . process_lines ( & mut |line, _| {
120- if line. contains ( "failed to select a version for the requirement" ) {
121- yanked_deps = true ;
122- } else if line. contains ( "failed to load source for dependency" )
123- || line. contains ( "no matching package named" )
124- {
125- missing_deps = true ;
126- }
127- } )
128- . run_capture ( )
129- {
130- Ok ( _) => Ok ( ( ) ) ,
131- Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if yanked_deps => {
132- Err ( PrepareError :: YankedDependencies ( stderr) . into ( ) )
133- }
134- Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if missing_deps => {
135- Err ( PrepareError :: MissingDependencies ( stderr) . into ( ) )
136- }
137- Err ( err) => Err ( err. into ( ) ) ,
138- }
115+ run_command ( cmd. cd ( self . source_dir ) )
139116 }
140117
141118 fn fetch_deps ( & mut self ) -> anyhow:: Result < ( ) > {
@@ -149,7 +126,6 @@ pub(crate) fn fetch_deps(
149126 source_dir : & Path ,
150127 fetch_build_std_targets : & [ & str ] ,
151128) -> anyhow:: Result < ( ) > {
152- let mut missing_deps = false ;
153129 let mut cmd = Command :: new ( workspace, toolchain. cargo ( ) )
154130 . args ( & [ "fetch" , "--manifest-path" , "Cargo.toml" ] )
155131 . cd ( source_dir) ;
@@ -163,15 +139,28 @@ pub(crate) fn fetch_deps(
163139 cmd = cmd. args ( & [ "--target" , target] ) ;
164140 }
165141
166- match cmd
167- . process_lines ( & mut |line, _| {
168- if line. contains ( "failed to load source for dependency" ) {
169- missing_deps = true ;
170- }
171- } )
172- . run_capture ( )
173- {
142+ run_command ( cmd)
143+ }
144+
145+ fn run_command ( cmd : Command ) -> anyhow:: Result < ( ) > {
146+ let mut yanked_deps = false ;
147+ let mut missing_deps = false ;
148+
149+ let mut process = |line : & str , _: & mut ProcessLinesActions | {
150+ if line. contains ( "failed to select a version for the requirement" ) {
151+ yanked_deps = true ;
152+ } else if line. contains ( "failed to load source for dependency" )
153+ || line. contains ( "no matching package named" )
154+ {
155+ missing_deps = true ;
156+ }
157+ } ;
158+
159+ match cmd. process_lines ( & mut process) . run_capture ( ) {
174160 Ok ( _) => Ok ( ( ) ) ,
161+ Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if yanked_deps => {
162+ Err ( PrepareError :: YankedDependencies ( stderr) . into ( ) )
163+ }
175164 Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if missing_deps => {
176165 Err ( PrepareError :: MissingDependencies ( stderr) . into ( ) )
177166 }
0 commit comments