1
1
use anyhow:: { anyhow, Context , Result } ;
2
2
use futures:: { stream, StreamExt } ;
3
3
use std:: collections:: { BTreeMap , HashSet } ;
4
- use std:: path:: PathBuf ;
4
+ use std:: path:: Path ;
5
5
use tracing:: { debug, error, info, warn} ;
6
6
7
7
use crate :: {
@@ -107,19 +107,19 @@ async fn update_forge_metadata_json(
107
107
debug ! ( "Processing Forge Promotions" ) ;
108
108
109
109
for ( promo_key, shortversion) in & promotions_metadata. promos {
110
- match promoted_key_expression. captures ( & promo_key) {
110
+ match promoted_key_expression. captures ( promo_key) {
111
111
None => {
112
112
warn ! ( "Skipping promotion {}, the key did not parse:" , promo_key) ;
113
113
}
114
114
Some ( captures) => {
115
- if let None = captures. name ( "mc" ) {
115
+ if captures. name ( "mc" ) . is_none ( ) {
116
116
debug ! (
117
117
"Skipping promotion {}, because it has no Minecraft version." ,
118
118
promo_key
119
119
) ;
120
120
continue ;
121
121
}
122
- if let Some ( _ ) = captures. name ( "branch" ) {
122
+ if captures. name ( "branch" ) . is_some ( ) {
123
123
debug ! (
124
124
"Skipping promotion {}, because it on a branch only." ,
125
125
promo_key
@@ -143,8 +143,7 @@ async fn update_forge_metadata_json(
143
143
let forge_version_pairs = maven_metadata
144
144
. versions
145
145
. iter ( )
146
- . map ( |( k, v) | v. iter ( ) . map ( |lv| ( k. clone ( ) , lv. clone ( ) ) ) )
147
- . flatten ( )
146
+ . flat_map ( |( k, v) | v. iter ( ) . map ( |lv| ( k. clone ( ) , lv. clone ( ) ) ) )
148
147
. collect :: < Vec < _ > > ( ) ;
149
148
let tasks = stream:: iter ( forge_version_pairs)
150
149
. map ( |( mc_version, long_version) | {
@@ -161,7 +160,7 @@ async fn update_forge_metadata_json(
161
160
) ) ,
162
161
163
162
Some ( captures) => {
164
- if let None = captures. name ( "mc" ) {
163
+ if captures. name ( "mc" ) . is_none ( ) {
165
164
Err ( anyhow ! (
166
165
"Forge long version {} not for a minecraft version?" ,
167
166
long_version
@@ -214,10 +213,7 @@ async fn update_forge_metadata_json(
214
213
new_index
215
214
. by_mc_version
216
215
. get_mut ( & mc_version)
217
- . expect ( & format ! (
218
- "Missing forge info for minecraft version {}" ,
219
- & mc_version
220
- ) )
216
+ . unwrap_or_else ( || panic ! ( "Missing forge info for minecraft version {}" , & mc_version) )
221
217
. versions
222
218
. push ( long_version. clone ( ) ) ;
223
219
// NOTE: we add this later after the fact. The forge promotions file lies about these.
@@ -228,21 +224,20 @@ async fn update_forge_metadata_json(
228
224
new_index
229
225
. by_mc_version
230
226
. get_mut ( & mc_version)
231
- . expect ( & format ! (
232
- "Missing forge info for minecraft version {}" ,
233
- & mc_version
234
- ) )
227
+ . unwrap_or_else ( || {
228
+ panic ! ( "Missing forge info for minecraft version {}" , & mc_version)
229
+ } )
235
230
. recommended = Some ( long_version. clone ( ) ) ;
236
231
}
237
232
}
238
233
239
234
debug ! ( "Post-processing forge promotions and adding missing 'latest'" ) ;
240
235
241
236
for ( mc_version, info) in & mut new_index. by_mc_version {
242
- let latest_version = info. versions . last ( ) . expect ( & format ! (
243
- "No forge versions for minecraft version {}" ,
244
- mc_version
245
- ) ) ;
237
+ let latest_version = info
238
+ . versions
239
+ . last ( )
240
+ . unwrap_or_else ( || panic ! ( "No forge versions for minecraft version {}" , mc_version ) ) ;
246
241
info. latest = Some ( latest_version. to_string ( ) ) ;
247
242
info ! ( "Added {} as latest for {}" , latest_version, mc_version)
248
243
}
@@ -353,9 +348,9 @@ async fn update_forge_legacy_metadata_json(
353
348
. map ( |version| {
354
349
let fm_dir = forge_meta_dir. clone ( ) ;
355
350
let li_path = legacy_info_path. clone ( ) ;
356
- tokio:: spawn (
357
- async move { process_legecy_forge_version ( & version, & fm_dir, & li_path) . await } ,
358
- )
351
+ tokio:: spawn ( async move {
352
+ process_legecy_forge_version ( & version, fm_dir. as_path ( ) , li_path. as_path ( ) ) . await
353
+ } )
359
354
} )
360
355
. buffer_unordered ( metadata_cfg. max_parallel_fetch_connections ) ;
361
356
let results = tasks
@@ -375,10 +370,8 @@ async fn update_forge_legacy_metadata_json(
375
370
376
371
let legacy_version_infos = process_results_ok ( results) ;
377
372
378
- for version_info in legacy_version_infos {
379
- if let Some ( ( long_version, version_info) ) = version_info {
380
- legacy_info_list. number . insert ( long_version, version_info) ;
381
- }
373
+ for ( long_version, version_info) in legacy_version_infos. into_iter ( ) . flatten ( ) {
374
+ legacy_info_list. number . insert ( long_version, version_info) ;
382
375
}
383
376
384
377
// only write legacy info if it's missing
@@ -410,7 +403,7 @@ async fn update_forge_legacy_metadata_json(
410
403
}
411
404
412
405
async fn process_forge_version (
413
- forge_meta_dir : & PathBuf ,
406
+ forge_meta_dir : & Path ,
414
407
recommended_set : & HashSet < String > ,
415
408
mc_version : & str ,
416
409
long_version : & str ,
@@ -426,8 +419,8 @@ async fn process_forge_version(
426
419
long_version : long_version. to_string ( ) ,
427
420
mc_version : mc_version. to_string ( ) ,
428
421
version : version. to_string ( ) ,
429
- build : build ,
430
- branch : branch ,
422
+ build,
423
+ branch,
431
424
latest : None , // NOTE: we add this later after the fact. The forge promotions file lies about these.
432
425
recommended : Some ( is_recommended) ,
433
426
files : Some ( files) ,
@@ -437,7 +430,7 @@ async fn process_forge_version(
437
430
}
438
431
439
432
async fn get_single_forge_files_manifest (
440
- forge_meta_dir : & PathBuf ,
433
+ forge_meta_dir : & Path ,
441
434
long_version : & str ,
442
435
) -> Result < BTreeMap < String , ForgeFile > > {
443
436
info ! ( "Getting Forge manifest for {long_version}" ) ;
@@ -530,8 +523,8 @@ async fn get_single_forge_files_manifest(
530
523
531
524
async fn process_legecy_forge_version (
532
525
version : & ForgeProcessedVersion ,
533
- forge_meta_dir : & PathBuf ,
534
- legacy_info_path : & PathBuf ,
526
+ forge_meta_dir : & Path ,
527
+ legacy_info_path : & Path ,
535
528
) -> Result < Option < ( String , ForgeLegacyInfo ) > > {
536
529
let jar_path = forge_meta_dir
537
530
. join ( "jars" )
@@ -662,29 +655,28 @@ async fn process_legecy_forge_version(
662
655
& profile_path. to_string_lossy( )
663
656
)
664
657
} ) ?;
665
- } else {
666
- if version. is_supported ( ) {
667
- return Err ( forge_profile_json. unwrap_err ( ) ) . with_context ( || {
668
- format ! (
669
- "Failure reading json from 'install_profile.json' in {}" ,
670
- & jar_path. to_string_lossy( )
671
- )
672
- } ) ;
673
- } else {
674
- debug ! (
675
- "Forge Version {} is not supported and won't be generated later." ,
676
- & version. long_version
658
+ } else if version. is_supported ( ) {
659
+ return Err ( forge_profile_json. unwrap_err ( ) ) . with_context ( || {
660
+ format ! (
661
+ "Failure reading json from 'install_profile.json' in {}" ,
662
+ & jar_path. to_string_lossy( )
677
663
)
678
- }
664
+ } ) ;
665
+ } else {
666
+ debug ! (
667
+ "Forge Version {} is not supported and won't be generated later." ,
668
+ & version. long_version
669
+ )
679
670
}
680
671
}
681
672
}
682
673
683
674
if !installer_info_path. is_file ( ) {
684
- let mut installer_info = InstallerInfo :: default ( ) ;
685
- installer_info. sha1hash = Some ( filehash ( & jar_path, HashAlgo :: Sha1 ) ?) ;
686
- installer_info. sha256hash = Some ( filehash ( & jar_path, HashAlgo :: Sha256 ) ?) ;
687
- installer_info. size = Some ( jar_path. metadata ( ) ?. len ( ) ) ;
675
+ let installer_info = InstallerInfo {
676
+ sha1hash : Some ( filehash ( & jar_path, HashAlgo :: Sha1 ) ?) ,
677
+ sha256hash : Some ( filehash ( & jar_path, HashAlgo :: Sha256 ) ?) ,
678
+ size : Some ( jar_path. metadata ( ) ?. len ( ) ) ,
679
+ } ;
688
680
689
681
let installer_info_json = serde_json:: to_string_pretty ( & installer_info) ?;
690
682
std:: fs:: write ( & installer_info_path, installer_info_json) . with_context ( || {
@@ -694,7 +686,7 @@ async fn process_legecy_forge_version(
694
686
)
695
687
} ) ?;
696
688
}
697
- return Ok ( None ) ;
689
+ Ok ( None )
698
690
} else {
699
691
// ignore the two versions without install manifests and jar mod class files
700
692
// TODO: fix those versions?
@@ -749,15 +741,16 @@ async fn process_legecy_forge_version(
749
741
}
750
742
}
751
743
752
- let mut legacy_info = ForgeLegacyInfo :: default ( ) ;
753
- legacy_info. release_time = Some ( time_stamp) ;
754
- legacy_info. sha1 = Some ( filehash ( & jar_path, HashAlgo :: Sha1 ) ?) ;
755
- legacy_info. sha256 = Some ( filehash ( & jar_path, HashAlgo :: Sha256 ) ?) ;
756
- legacy_info. size = Some ( jar_path. metadata ( ) ?. len ( ) ) ;
744
+ let legacy_info = ForgeLegacyInfo {
745
+ release_time : Some ( time_stamp) ,
746
+ sha1 : Some ( filehash ( & jar_path, HashAlgo :: Sha1 ) ?) ,
747
+ sha256 : Some ( filehash ( & jar_path, HashAlgo :: Sha256 ) ?) ,
748
+ size : Some ( jar_path. metadata ( ) ?. len ( ) ) ,
749
+ } ;
757
750
758
751
return Ok ( Some ( ( version. long_version . clone ( ) , legacy_info) ) ) ;
759
752
// legacy_info_list.number.insert(key, legacy_info);
760
753
}
761
- return Ok ( None ) ;
754
+ Ok ( None )
762
755
}
763
756
}
0 commit comments