1
- use crate :: cmd:: { Command , CommandError } ;
1
+ use crate :: cmd:: { Command , CommandError , ProcessLinesActions } ;
2
2
use crate :: { build:: CratePatch , Crate , Toolchain , Workspace } ;
3
3
use anyhow:: Context as _;
4
4
use log:: info;
@@ -101,8 +101,6 @@ impl<'a> Prepare<'a> {
101
101
return Ok ( ( ) ) ;
102
102
}
103
103
104
- let mut yanked_deps = false ;
105
- let mut missing_deps = false ;
106
104
let mut cmd = Command :: new ( self . workspace , self . toolchain . cargo ( ) ) . args ( & [
107
105
"generate-lockfile" ,
108
106
"--manifest-path" ,
@@ -114,28 +112,7 @@ impl<'a> Prepare<'a> {
114
112
. env ( "__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS" , "nightly" ) ;
115
113
}
116
114
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 ) )
139
116
}
140
117
141
118
fn fetch_deps ( & mut self ) -> anyhow:: Result < ( ) > {
@@ -149,7 +126,6 @@ pub(crate) fn fetch_deps(
149
126
source_dir : & Path ,
150
127
fetch_build_std_targets : & [ & str ] ,
151
128
) -> anyhow:: Result < ( ) > {
152
- let mut missing_deps = false ;
153
129
let mut cmd = Command :: new ( workspace, toolchain. cargo ( ) )
154
130
. args ( & [ "fetch" , "--manifest-path" , "Cargo.toml" ] )
155
131
. cd ( source_dir) ;
@@ -163,15 +139,28 @@ pub(crate) fn fetch_deps(
163
139
cmd = cmd. args ( & [ "--target" , target] ) ;
164
140
}
165
141
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 ( ) {
174
160
Ok ( _) => Ok ( ( ) ) ,
161
+ Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if yanked_deps => {
162
+ Err ( PrepareError :: YankedDependencies ( stderr) . into ( ) )
163
+ }
175
164
Err ( CommandError :: ExecutionFailed { status : _, stderr } ) if missing_deps => {
176
165
Err ( PrepareError :: MissingDependencies ( stderr) . into ( ) )
177
166
}
0 commit comments