@@ -11,7 +11,7 @@ use semver::Version;
1111use url:: Url ;
1212
1313use crate :: config:: { App , Config , SumAlgo } ;
14- use crate :: meta:: { Download , DownloadSum , Meta , Sign , SignedSum } ;
14+ use crate :: meta:: { Download , DownloadChecksumFile , DownloadSum , Meta , Sign , SignedSum } ;
1515
1616pub async fn get_meta ( config : Config , app : App , version : Version ) -> Result < Meta > {
1717 let release = octocrab:: instance ( )
@@ -22,6 +22,7 @@ pub async fn get_meta(config: Config, app: App, version: Version) -> Result<Meta
2222
2323 let mut downloads = Vec :: new ( ) ;
2424 let mut sums = Vec :: new ( ) ;
25+ let mut perfile_checksum_assets: Vec < ( _ , url:: Url , String ) > = Vec :: new ( ) ;
2526 ' assets: for asset in & release. assets {
2627 let url = & asset. browser_download_url ;
2728 let filename = url
@@ -36,6 +37,13 @@ pub async fn get_meta(config: Config, app: App, version: Version) -> Result<Meta
3637 }
3738 }
3839
40+ if let Some ( ( algo, suffix) ) = config. match_perfile_checksum ( filename) {
41+ if let Some ( base) = filename. strip_suffix ( suffix) {
42+ perfile_checksum_assets. push ( ( algo, url. clone ( ) , base. to_string ( ) ) ) ;
43+ }
44+ continue ' assets;
45+ }
46+
3947 match Download :: new ( & config, url, filename, asset. size . try_into ( ) ?) {
4048 Ok ( dl) => downloads. push ( dl) ,
4149 Err ( err) => eprintln ! ( "warning: {}" , err) ,
@@ -75,6 +83,17 @@ pub async fn get_meta(config: Config, app: App, version: Version) -> Result<Meta
7583 } )
7684 . finish ( ) ;
7785
86+ for ( algo, url, base) in perfile_checksum_assets {
87+ for dl in & mut downloads {
88+ if dl. filename == base {
89+ dl. checksum_files . push ( DownloadChecksumFile { algo, url : url. clone ( ) } ) ;
90+ }
91+ }
92+ }
93+ for dl in & mut downloads {
94+ dl. checksum_files . sort ( ) ;
95+ }
96+
7897 let http = HttpClientBuilder :: new ( )
7998 . redirect_policy ( RedirectPolicy :: Follow )
8099 . build ( ) ?;
0 commit comments