diff --git a/src/rebar.hrl b/src/rebar.hrl index dfb56df2..edc82162 100644 --- a/src/rebar.hrl +++ b/src/rebar.hrl @@ -24,7 +24,7 @@ -define(DEFAULT_RELEASE_DIR, "rel"). -define(CONFIG_VERSION, "1.2.0"). -define(SUPPORTED_CONFIG_VERSIONS, ["1.1.0", "1.2.0"]). % older were untagged --define(DEFAULT_CDN, "https://repo.hex.pm/"). +-define(DEFAULT_CDN, "https://repo.hex.pm"). -define(REMOTE_PACKAGE_DIR, "tarballs"). -define(LOCK_FILE, "rebar.lock"). -define(DEFAULT_COMPILER_SOURCE_FORMAT, relative). diff --git a/src/rebar3.erl b/src/rebar3.erl index 91123460..1e02ae0e 100644 --- a/src/rebar3.erl +++ b/src/rebar3.erl @@ -131,13 +131,12 @@ run_aux(State, RawArgs) -> rebar_utils:check_min_otp_version(rebar_state:get(State1, minimum_otp_vsn, undefined)), rebar_utils:check_blacklisted_otp_versions(rebar_state:get(State1, blacklisted_otp_vsns, undefined)), - %% Change the default hex CDN - State2 = case os:getenv("HEX_CDN") of - false -> - State1; - CDN -> - rebar_state:set(State1, rebar_packages_cdn, CDN) + %% Maybe change the default hex CDN + HexCDN = case os:getenv("HEX_CDN") of + false -> ?DEFAULT_CDN; + CDN -> CDN end, + State2 = rebar_state:set(State1, rebar_packages_cdn, HexCDN), Compilers = application:get_env(rebar, compilers, []), State0 = rebar_state:compilers(State2, Compilers), diff --git a/src/rebar_pkg_resource.erl b/src/rebar_pkg_resource.erl index 54688424..c81df706 100644 --- a/src/rebar_pkg_resource.erl +++ b/src/rebar_pkg_resource.erl @@ -107,7 +107,7 @@ download(TmpDir, Pkg={pkg, Name, Vsn, _OldHash, _Hash, Repo}, State, _ResourceSt ETagFile = binary_to_list(<>), CachePath = filename:join(PackageDir, Package), ETagPath = filename:join(PackageDir, ETagFile), - case cached_download(TmpDir, CachePath, Pkg, etag(CachePath, ETagPath), ETagPath, UpdateETag) of + case cached_download(TmpDir, CachePath, Pkg, State, etag(CachePath, ETagPath), ETagPath, UpdateETag) of {bad_registry_checksum, Expected, Found} -> %% checksum comparison failed. in case this is from a modified cached package %% overwrite the etag if it exists so it is not relied on again @@ -206,17 +206,19 @@ store_etag_in_cache(Path, ETag) -> %%%============================================================================= %%% Private functions %%%============================================================================= --spec cached_download(TmpDir, CachePath, Pkg, ETag, ETagPath, UpdateETag) -> Res when +-spec cached_download(TmpDir, CachePath, Pkg, State, ETag, ETagPath, UpdateETag) -> Res when TmpDir :: file:name(), CachePath :: file:name(), Pkg :: package(), + State :: rebar_state:t(), ETag :: binary(), ETagPath :: file:name(), UpdateETag :: boolean(), Res :: ok | {unexpected_hash, integer(), integer()} | {fetch_fail, binary(), binary()}. -cached_download(TmpDir, CachePath, Pkg={pkg, Name, Vsn, _OldHash, _Hash, RepoConfig}, ETag, +cached_download(TmpDir, CachePath, Pkg={pkg, Name, Vsn, _OldHash, _Hash, RepoConfig}, State, ETag, ETagPath, UpdateETag) -> - case request(RepoConfig, Name, Vsn, ETag) of + CDN = maybe_default_cdn(State), + case request(RepoConfig#{repo_url => CDN}, Name, Vsn, ETag) of {ok, cached} -> ?INFO("Version cached at ~ts is up to date, reusing it", [CachePath]), serve_from_cache(TmpDir, CachePath, Pkg); @@ -232,6 +234,10 @@ 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(),