From 16fb726e31c1208e859e574d4423e18d7d4c8d91 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sat, 8 Sep 2018 06:53:09 -0600 Subject: [PATCH] move packages to top level of of hexpm cache dir --- src/rebar_packages.erl | 40 +++++++++++----------------------- src/rebar_pkg_resource.erl | 4 ++-- src/rebar_prv_install_deps.erl | 8 +++---- src/rebar_resource.erl | 6 ++++- test/rebar_pkg_SUITE.erl | 6 +---- test/rebar_pkg_alias_SUITE.erl | 2 +- 6 files changed, 25 insertions(+), 41 deletions(-) diff --git a/src/rebar_packages.erl b/src/rebar_packages.erl index d00222df..efbfc06a 100644 --- a/src/rebar_packages.erl +++ b/src/rebar_packages.erl @@ -7,7 +7,7 @@ ,new_package_table/0 ,load_and_verify_version/1 ,registry_dir/1 - ,package_dir/1 + ,package_dir/2 ,registry_checksum/4 ,find_highest_matching/5 ,find_highest_matching_/5 @@ -162,34 +162,20 @@ handle_missing_package(PkgKey, Repo, State, Fun) -> registry_dir(State) -> CacheDir = rebar_dir:global_cache_dir(rebar_state:opts(State)), - case rebar_state:get(State, rebar_packages_cdn, ?DEFAULT_CDN) of - ?DEFAULT_CDN -> - RegistryDir = filename:join([CacheDir, "hex", "default"]), - case filelib:ensure_dir(filename:join(RegistryDir, "placeholder")) of - ok -> ok; - {error, Posix} when Posix == eaccess; Posix == enoent -> - ?ABORT("Could not write to ~p. Please ensure the path is writeable.", - [RegistryDir]) - end, - {ok, RegistryDir}; - CDN -> - case rebar_utils:url_append_path(CDN, ?REMOTE_PACKAGE_DIR) of - {ok, Parsed} -> - {ok, {_, _, Host, _, Path, _}} = http_uri:parse(Parsed), - CDNHostPath = lists:reverse(rebar_string:lexemes(Host, ".")), - CDNPath = tl(filename:split(Path)), - RegistryDir = filename:join([CacheDir, "hex"] ++ CDNHostPath ++ CDNPath), - ok = filelib:ensure_dir(filename:join(RegistryDir, "placeholder")), - {ok, RegistryDir}; - _ -> - {uri_parse_error, CDN} - end - end. - -package_dir(State) -> + RegistryDir = filename:join([CacheDir, "hex"]), + case filelib:ensure_dir(filename:join(RegistryDir, "placeholder")) of + ok -> ok; + {error, Posix} when Posix == eaccess; Posix == enoent -> + ?ABORT("Could not write to ~p. Please ensure the path is writeable.", + [RegistryDir]) + end, + {ok, RegistryDir}. + +package_dir(Repo, State) -> case registry_dir(State) of {ok, RegistryDir} -> - PackageDir = filename:join([RegistryDir, "packages"]), + RepoName = maps:get(name, Repo), + PackageDir = filename:join([RegistryDir, rebar_utils:to_list(RepoName), "packages"]), ok = filelib:ensure_dir(filename:join(PackageDir, "placeholder")), {ok, PackageDir}; Error -> diff --git a/src/rebar_pkg_resource.erl b/src/rebar_pkg_resource.erl index 4856b894..07039bfe 100644 --- a/src/rebar_pkg_resource.erl +++ b/src/rebar_pkg_resource.erl @@ -97,8 +97,8 @@ download(TmpDir, Pkg, State) -> State :: rebar_state:t(), UpdateETag :: boolean(), Res :: download_result(). -download(TmpDir, Pkg={pkg, Name, Vsn, _Hash, _}, State, UpdateETag) -> - {ok, PackageDir} = rebar_packages:package_dir(State), +download(TmpDir, Pkg={pkg, Name, Vsn, _Hash, Repo}, State, UpdateETag) -> + {ok, PackageDir} = rebar_packages:package_dir(Repo, State), Package = binary_to_list(<>), ETagFile = binary_to_list(<>), CachePath = filename:join(PackageDir, Package), diff --git a/src/rebar_prv_install_deps.erl b/src/rebar_prv_install_deps.erl index 4caa59ce..046bca28 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -374,13 +374,10 @@ make_relative_to_root(State, Path) when is_list(Path) -> fetch_app(AppInfo, AppDir, State) -> ?INFO("Fetching ~ts (~p)", [rebar_app_info:name(AppInfo), - format_source(rebar_app_info:source(AppInfo))]), + rebar_resource:format_source(rebar_app_info:source(AppInfo))]), Source = rebar_app_info:source(AppInfo), true = rebar_fetch:download_source(AppDir, Source, State). -format_source({pkg, Name, Vsn, _Hash, _}) -> {pkg, Name, Vsn}; -format_source(Source) -> Source. - %% This is called after the dep has been downloaded and unpacked, if it hadn't been already. %% So this is the first time for newly downloaded apps that its .app/.app.src data can %% be read in an parsed. @@ -398,7 +395,8 @@ maybe_upgrade(AppInfo, AppDir, Upgrade, State) -> true -> case rebar_fetch:needs_update(AppDir, Source, State) of true -> - ?INFO("Upgrading ~ts (~p)", [rebar_app_info:name(AppInfo), rebar_app_info:source(AppInfo)]), + ?INFO("Upgrading ~ts (~p)", [rebar_app_info:name(AppInfo), + rebar_resource:format_source(rebar_app_info:source(AppInfo))]), true = rebar_fetch:download_source(AppDir, Source, State); false -> case Upgrade of diff --git a/src/rebar_resource.erl b/src/rebar_resource.erl index d0625506..ed8a2170 100644 --- a/src/rebar_resource.erl +++ b/src/rebar_resource.erl @@ -4,7 +4,8 @@ -export([new/3, find_resource_module/2, - find_resource_state/2]). + find_resource_state/2, + format_source/1]). -export_type([resource/0 ,source/0 @@ -62,3 +63,6 @@ find_resource_state(Type, Resources) -> #resource{state=State} -> State end. + +format_source({pkg, Name, Vsn, _Hash, _}) -> {pkg, Name, Vsn}; +format_source(Source) -> Source. diff --git a/test/rebar_pkg_SUITE.erl b/test/rebar_pkg_SUITE.erl index 605d0dad..d0545a4c 100644 --- a/test/rebar_pkg_SUITE.erl +++ b/test/rebar_pkg_SUITE.erl @@ -33,10 +33,6 @@ init_per_testcase(pkgs_provider=Name, Config) -> CacheDir = filename:join([CacheRoot, "hex", "com", "test", "packages"]), filelib:ensure_dir(filename:join([CacheDir, "registry"])), ok = ets:tab2file(Tid, filename:join([CacheDir, "registry"])), - %% meck:new(rebar_packages, [passthrough]), - %% meck:expect(rebar_packages, registry_dir, fun(_) -> {ok, CacheDir} end), - %% meck:expect(rebar_packages, package_dir, fun(_) -> {ok, CacheDir} end), - %% rebar_prv_update:hex_to_index(rebar_state:new()), Config; init_per_testcase(good_uncached=Name, Config0) -> Config = [{good_cache, false}, @@ -278,7 +274,7 @@ mock_config(Name, Config) -> meck:expect(rebar_dir, global_cache_dir, fun(_) -> CacheRoot end), meck:expect(rebar_packages, registry_dir, fun(_) -> {ok, CacheDir} end), - meck:expect(rebar_packages, package_dir, fun(_) -> {ok, CacheDir} end), + meck:expect(rebar_packages, package_dir, fun(_, _) -> {ok, CacheDir} end), meck:new(rebar_prv_update, [passthrough]), meck:expect(rebar_prv_update, do, fun(State) -> {ok, State} end), diff --git a/test/rebar_pkg_alias_SUITE.erl b/test/rebar_pkg_alias_SUITE.erl index 0dd829cb..9b0b997d 100644 --- a/test/rebar_pkg_alias_SUITE.erl +++ b/test/rebar_pkg_alias_SUITE.erl @@ -215,7 +215,7 @@ mock_config(Name, Config) -> meck:new(rebar_packages, [passthrough, no_link]), meck:expect(rebar_packages, registry_dir, fun(_) -> {ok, CacheDir} end), - meck:expect(rebar_packages, package_dir, fun(_) -> {ok, CacheDir} end), + meck:expect(rebar_packages, package_dir, fun(_, _) -> {ok, CacheDir} end), %% TODO: is something else wrong that we need this for transitive_alias to pass meck:expect(rebar_packages, update_package, fun(_, _, _) -> ok end),