瀏覽代碼

move packages to top level of of hexpm cache dir

pull/1876/head
Tristan Sloughter 6 年之前
父節點
當前提交
16fb726e31
共有 6 個檔案被更改,包括 25 行新增41 行删除
  1. +13
    -27
      src/rebar_packages.erl
  2. +2
    -2
      src/rebar_pkg_resource.erl
  3. +3
    -5
      src/rebar_prv_install_deps.erl
  4. +5
    -1
      src/rebar_resource.erl
  5. +1
    -5
      test/rebar_pkg_SUITE.erl
  6. +1
    -1
      test/rebar_pkg_alias_SUITE.erl

+ 13
- 27
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 ->

+ 2
- 2
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(<<Name/binary, "-", Vsn/binary, ".tar">>),
ETagFile = binary_to_list(<<Name/binary, "-", Vsn/binary, ".etag">>),
CachePath = filename:join(PackageDir, Package),

+ 3
- 5
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

+ 5
- 1
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.

+ 1
- 5
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),

+ 1
- 1
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),

Loading…
取消
儲存