diff --git a/src/rebar3.erl b/src/rebar3.erl index 1f9a041aa..1c0f3684a 100644 --- a/src/rebar3.erl +++ b/src/rebar3.erl @@ -134,6 +134,7 @@ run_aux(State, RawArgs) -> %% Maybe change the default hex CDN HexCDN = case os:getenv("HEX_CDN") of false -> ?DEFAULT_CDN; + [] -> ?DEFAULT_CDN; CDN -> CDN end, State2 = rebar_state:set(State1, rebar_packages_cdn, HexCDN), diff --git a/src/rebar_hex_repos.erl b/src/rebar_hex_repos.erl index f7a9dabba..7f1da5c48 100644 --- a/src/rebar_hex_repos.erl +++ b/src/rebar_hex_repos.erl @@ -34,7 +34,7 @@ from_state(BaseConfig, State) -> %% add base config entries that are specific to use by rebar3 and not overridable Repos1 = merge_with_base_and_auth(Repos, BaseConfig, Auth), %% merge organizations parent repo options into each oraganization repo - update_organizations(Repos1). + update_organizations(maybe_override_default_repo_url(Repos1, State)). -spec get_repo_config(unicode:unicode_binary(), rebar_state:t() | [repo()]) -> {ok, repo()} | error. @@ -105,6 +105,15 @@ update_organizations(Repos) -> Repo end, Repos). +maybe_override_default_repo_url(Repos, State) -> + lists:map(fun(Repo=#{repo_name := ?PUBLIC_HEX_REPO}) -> + Repo#{repo_url => rebar_state:default_hex_repo_url_override(State)}; + (Repo=#{name := ?PUBLIC_HEX_REPO}) -> + Repo#{repo_url => rebar_state:default_hex_repo_url_override(State)}; + (Repo) -> + Repo + end, Repos). + update_repo_list(R=#{name := N}, [H=#{name := HN} | Rest]) when N =:= HN -> [maps:merge(R, H) | Rest]; update_repo_list(R, [H | Rest]) -> diff --git a/src/rebar_packages.erl b/src/rebar_packages.erl index 34d410418..ec2239cc6 100644 --- a/src/rebar_packages.erl +++ b/src/rebar_packages.erl @@ -243,6 +243,8 @@ parse_checksum(Checksum) -> update_package(Name, RepoConfig=#{name := Repo}, State) -> ?MODULE:verify_table(State), + ?DEBUG("Getting definition for package ~ts from repo ~ts via repo_url ~ts", + [Name, maps:get(name, RepoConfig, undefined), maps:get(repo_url, RepoConfig, undefined)]), try r3_hex_repo:get_package(get_package_repo_config(RepoConfig), Name) of {ok, {200, _Headers, Releases}} -> _ = insert_releases(Name, Releases, Repo, ?PACKAGE_TABLE), diff --git a/src/rebar_pkg_resource.erl b/src/rebar_pkg_resource.erl index cbad74eed..97bb6e928 100644 --- a/src/rebar_pkg_resource.erl +++ b/src/rebar_pkg_resource.erl @@ -210,15 +210,16 @@ store_etag_in_cache(Path, ETag) -> UpdateETag :: boolean(), Res :: ok | {unexpected_hash, integer(), integer()} | {fetch_fail, binary(), binary()} | {bad_registry_checksum, integer(), integer()} | {error, _}. -cached_download(TmpDir, CachePath, Pkg={pkg, Name, Vsn, _OldHash, _Hash, RepoConfig}, State, ETag, +cached_download(TmpDir, CachePath, Pkg={pkg, Name, Vsn, _OldHash, _Hash, RepoConfig}, _State, ETag, ETagPath, UpdateETag) -> - CDN = maybe_default_cdn(State), - case request(RepoConfig#{repo_url => CDN}, Name, Vsn, ETag) of + ?DEBUG("Making request to get package ~ts tarball from repo ~ts via repo_url ~ts", + [Name, maps:get(name, RepoConfig, undefined), maps:get(repo_url, RepoConfig, undefined)]), + case request(RepoConfig, Name, Vsn, ETag) of {ok, cached} -> ?DEBUG("Version cached at ~ts is up to date, reusing it", [CachePath]), serve_from_cache(TmpDir, CachePath, Pkg); {ok, Body, NewETag} -> - ?DEBUG("Downloaded package from repo ~ts, caching at ~ts", [CDN, CachePath]), + ?DEBUG("Downloaded package ~ts, caching at ~ts", [Name, CachePath]), maybe_store_etag_in_cache(UpdateETag, ETagPath, NewETag), serve_from_download(TmpDir, CachePath, Pkg, Body); error when ETag =/= <<>> -> @@ -229,10 +230,6 @@ cached_download(TmpDir, CachePath, Pkg={pkg, Name, Vsn, _OldHash, _Hash, RepoCon {fetch_fail, Name, Vsn} end. -maybe_default_cdn(State) -> - CDN = rebar_state:get(State, rebar_packages_cdn, ?DEFAULT_CDN), - rebar_utils:to_binary(CDN). - -spec serve_from_cache(TmpDir, CachePath, Pkg) -> Res when TmpDir :: file:name(), CachePath :: file:name(), diff --git a/src/rebar_state.erl b/src/rebar_state.erl index c8b3c8ae0..b2234c75a 100644 --- a/src/rebar_state.erl +++ b/src/rebar_state.erl @@ -35,6 +35,8 @@ all_checkout_deps/1, namespace/1, namespace/2, + default_hex_repo_url_override/1, + deps_names/1, to_list/1, @@ -492,6 +494,11 @@ add_provider(State=#state_t{providers=Providers, allow_provider_overrides=false} State#state_t{providers=[Provider | Providers]} end. +-spec default_hex_repo_url_override(t()) -> binary(). +default_hex_repo_url_override(State) -> + CDN = rebar_state:get(State, rebar_packages_cdn, ?DEFAULT_CDN), + rebar_utils:to_binary(CDN). + -dialyzer({no_match, create_logic_providers/2}). % we want to be permissive with providers:new/2 create_logic_providers(ProviderModules, State0) -> try