@@ -100,33 +100,26 @@ fn update_version_file(version: &str) {
100
100
*/
101
101
102
102
pub ( crate ) fn read_godot_version ( godot_bin : & Path ) -> GodotVersion {
103
- let output = Command :: new ( godot_bin)
104
- . arg ( "--version" )
105
- . output ( )
106
- . unwrap_or_else ( |_| {
107
- panic ! (
108
- "failed to invoke Godot executable '{}'" ,
109
- godot_bin. display( )
110
- )
111
- } ) ;
103
+ let mut cmd = Command :: new ( godot_bin) ;
104
+ cmd. arg ( "--version" ) ;
112
105
113
- let output = String :: from_utf8 ( output . stdout ) . expect ( "convert Godot version to UTF-8 ") ;
114
- println ! ( " Godot version: {output} ") ;
106
+ let output = execute ( cmd , "read Godot version") ;
107
+ let stdout = std :: str :: from_utf8 ( & output . stdout ) . expect ( "convert Godot version to UTF-8 ") ;
115
108
116
- match parse_godot_version ( & output ) {
109
+ match parse_godot_version ( & stdout ) {
117
110
Ok ( parsed) => {
118
111
assert_eq ! (
119
112
parsed. major,
120
113
4 ,
121
114
"Only Godot versions >= 4.0 are supported; found version {}." ,
122
- output . trim( )
115
+ stdout . trim( )
123
116
) ;
124
117
125
118
parsed
126
119
}
127
120
Err ( e) => {
128
121
// Don't treat this as fatal error
129
- panic ! ( "failed to parse Godot version '{output }': {e}" )
122
+ panic ! ( "failed to parse Godot version '{stdout }': {e}" )
130
123
}
131
124
}
132
125
}
@@ -275,27 +268,25 @@ pub(crate) fn locate_godot_binary() -> PathBuf {
275
268
}
276
269
}
277
270
278
- fn execute ( mut cmd : Command , error_message : & str ) -> Output {
271
+ fn execute ( cmd : Command , error_message : & str ) -> Output {
272
+ try_execute ( cmd, error_message) . unwrap_or_else ( |e| panic ! ( "{}" , e) )
273
+ }
274
+
275
+ fn try_execute ( mut cmd : Command , error_message : & str ) -> Result < Output , String > {
279
276
let output = cmd
280
277
. output ( )
281
- . unwrap_or_else ( |_| panic ! ( "failed to execute command: {error_message}" ) ) ;
278
+ . map_err ( |_| format ! ( "failed to invoke command ({error_message})\n \t {cmd:?}" ) ) ?;
279
+
280
+ println ! ( "[stdout] {}" , std:: str :: from_utf8( & output. stdout) . unwrap( ) ) ;
281
+ println ! ( "[stderr] {}" , std:: str :: from_utf8( & output. stderr) . unwrap( ) ) ;
282
+ println ! ( "[status] {}" , output. status) ;
282
283
283
284
if output. status . success ( ) {
284
- println ! (
285
- "[stdout] {}" ,
286
- String :: from_utf8( output. stdout. clone( ) ) . unwrap( )
287
- ) ;
288
- println ! (
289
- "[stderr] {}" ,
290
- String :: from_utf8( output. stderr. clone( ) ) . unwrap( )
291
- ) ;
292
- println ! ( "[status] {}" , output. status) ;
293
- output
285
+ Ok ( output)
294
286
} else {
295
- println ! ( "[stdout] {}" , String :: from_utf8( output. stdout) . unwrap( ) ) ;
296
- println ! ( "[stderr] {}" , String :: from_utf8( output. stderr) . unwrap( ) ) ;
297
- println ! ( "[status] {}" , output. status) ;
298
- panic ! ( "command returned error: {error_message}" ) ;
287
+ Err ( format ! (
288
+ "command returned error ({error_message})\n \t {cmd:?}"
289
+ ) )
299
290
}
300
291
}
301
292
0 commit comments