11#![ allow( dead_code) ]
22
33use anyhow:: Result ;
4- use postgresql_archive:: VersionReq ;
4+ use postgresql_archive:: configuration :: { custom , theseus } ;
55use postgresql_archive:: repository:: github:: repository:: GitHub ;
6+ use postgresql_archive:: { VersionReq , matcher} ;
67use postgresql_archive:: { get_archive, repository} ;
78use std:: fs:: File ;
89use std:: io:: Write ;
@@ -20,7 +21,17 @@ pub(crate) async fn stage_postgresql_archive() -> Result<()> {
2021 let default_releases_url = postgresql_archive:: configuration:: theseus:: URL . to_string ( ) ;
2122 #[ cfg( not( feature = "theseus" ) ) ]
2223 let default_releases_url = String :: new ( ) ;
23- let releases_url = env:: var ( "POSTGRESQL_RELEASES_URL" ) . unwrap_or ( default_releases_url) ;
24+
25+ let releases_url = match env:: var ( "POSTGRESQL_RELEASES_URL" ) {
26+ Ok ( custom_url) if !default_releases_url. is_empty ( ) => {
27+ register_custom_repository ( ) ?;
28+ custom_url
29+ }
30+ _ => {
31+ register_theseus_repository ( ) ?;
32+ default_releases_url
33+ }
34+ } ;
2435 println ! ( "PostgreSQL releases URL: {releases_url}" ) ;
2536 let postgres_version_req = env:: var ( "POSTGRESQL_VERSION" ) . unwrap_or ( "*" . to_string ( ) ) ;
2637 let version_req = VersionReq :: from_str ( postgres_version_req. as_str ( ) ) ?;
@@ -40,7 +51,6 @@ pub(crate) async fn stage_postgresql_archive() -> Result<()> {
4051 return Ok ( ( ) ) ;
4152 }
4253
43- register_github_repository ( ) ?;
4454 let ( asset_version, archive) = get_archive ( & releases_url, & version_req) . await ?;
4555
4656 fs:: write ( archive_version_file. clone ( ) , asset_version. to_string ( ) ) ?;
@@ -52,14 +62,20 @@ pub(crate) async fn stage_postgresql_archive() -> Result<()> {
5262 Ok ( ( ) )
5363}
5464
55- fn register_github_repository ( ) -> Result < ( ) > {
56- repository:: registry:: register (
57- |url| {
58- let parsed_url = Url :: parse ( url) ?;
59- let host = parsed_url. host_str ( ) . unwrap_or_default ( ) ;
60- Ok ( host. ends_with ( "github.com" ) )
61- } ,
62- Box :: new ( GitHub :: new) ,
63- ) ?;
65+ fn supports_github_url ( url : & str ) -> postgresql_archive:: Result < bool > {
66+ let parsed_url = Url :: parse ( url) ?;
67+ let host = parsed_url. host_str ( ) . unwrap_or_default ( ) ;
68+ Ok ( host. ends_with ( "github.com" ) )
69+ }
70+
71+ fn register_custom_repository ( ) -> Result < ( ) > {
72+ repository:: registry:: register ( supports_github_url, Box :: new ( GitHub :: new) ) ?;
73+ matcher:: registry:: register ( supports_github_url, custom:: matcher) ?;
74+ Ok ( ( ) )
75+ }
76+
77+ fn register_theseus_repository ( ) -> Result < ( ) > {
78+ repository:: registry:: register ( supports_github_url, Box :: new ( GitHub :: new) ) ?;
79+ matcher:: registry:: register ( supports_github_url, theseus:: matcher) ?;
6480 Ok ( ( ) )
6581}
0 commit comments