@@ -229,7 +229,7 @@ fn select_asset<'a>(
229229 score_asset ( & asset. name , repo, detected_os, detected_arch, file_type) ,
230230 )
231231 } )
232- . filter ( |( _, score) | * score > 0 )
232+ . filter ( |( _, score) | asset_regex . is_some ( ) || * score > 0 )
233233 . collect ( ) ;
234234
235235 let mut candidates = candidates;
@@ -613,6 +613,7 @@ fn binary_score(path: &Path, repo: &str) -> i32 {
613613#[ cfg( test) ]
614614mod tests {
615615 use super :: * ;
616+ use crate :: github:: GitHubReleaseAsset ;
616617 use anyhow:: Result ;
617618 use std:: fs;
618619 use std:: path:: PathBuf ;
@@ -631,6 +632,51 @@ mod tests {
631632 ) )
632633 }
633634
635+ fn asset ( name : & str , size : u64 ) -> GitHubReleaseAsset {
636+ GitHubReleaseAsset {
637+ name : name. to_string ( ) ,
638+ browser_download_url : format ! ( "https://example.com/{}" , name) ,
639+ content_type : None ,
640+ size,
641+ }
642+ }
643+
644+ #[ test]
645+ fn select_asset_name_respects_regex_even_when_score_is_low ( ) -> Result < ( ) > {
646+ let assets = vec ! [
647+ asset( "WinDirStat.zip" , 1_000 ) ,
648+ asset( "WinDirStat-x64.msi" , 2_000 ) ,
649+ ] ;
650+
651+ let selected = select_asset_name_for_request (
652+ & assets,
653+ "windirstat" ,
654+ Some ( r"^WinDirStat\.zip$" ) ,
655+ Some ( "windows" ) ,
656+ Some ( "amd64" ) ,
657+ FileTypePreference :: Archive ,
658+ ) ?;
659+
660+ assert_eq ! ( selected, "WinDirStat.zip" ) ;
661+ Ok ( ( ) )
662+ }
663+
664+ #[ test]
665+ fn select_asset_name_without_regex_still_rejects_low_scores ( ) {
666+ let assets = vec ! [ asset( "WinDirStat.zip" , 1_000 ) ] ;
667+
668+ let result = select_asset_name_for_request (
669+ & assets,
670+ "windirstat" ,
671+ None ,
672+ Some ( "windows" ) ,
673+ Some ( "amd64" ) ,
674+ FileTypePreference :: Archive ,
675+ ) ;
676+
677+ assert ! ( result. is_err( ) ) ;
678+ }
679+
634680 #[ test]
635681 fn probable_binary_rejects_archives ( ) {
636682 assert ! ( !is_probable_binary( Path :: new(
0 commit comments