Преглед изворни кода

use 'default' for default hex repo path in cache and include in info messages

pull/740/head
Tristan Sloughter пре 9 година
родитељ
комит
391959dae8
5 измењених фајлова са 37 додато и 16 уклоњено
  1. +5
    -1
      src/rebar_file_utils.erl
  2. +20
    -7
      src/rebar_packages.erl
  3. +2
    -2
      src/rebar_pkg_resource.erl
  4. +8
    -5
      src/rebar_prv_update.erl
  5. +2
    -1
      test/rebar_pkg_SUITE.erl

+ 5
- 1
src/rebar_file_utils.erl Прегледај датотеку

@ -27,6 +27,7 @@
-module(rebar_file_utils).
-export([try_consult/1,
replace_home_dir/1,
format_error/1,
symlink_or_copy/2,
rm_rf/1,
@ -59,6 +60,10 @@ try_consult(File) ->
throw(?PRV_ERROR({bad_term_file, File, Reason}))
end.
replace_home_dir(Dir) ->
HomeDir = rebar_dir:home_dir(),
re:replace(Dir, [$^ | HomeDir], "~", [{return, list}]).
format_error({bad_term_file, AppFile, Reason}) ->
io_lib:format("Error reading file ~s: ~s", [AppFile, file:format_error(Reason)]).
@ -318,4 +323,3 @@ cp_r_win32(Source,Dest) ->
ok = cp_r_win32({filelib:is_dir(Src), Src}, Dst)
end, filelib:wildcard(Source)),
ok.

+ 20
- 7
src/rebar_packages.erl Прегледај датотеку

@ -4,6 +4,7 @@
,close_packages/0
,load_and_verify_version/1
,deps/3
,registry_dir/1
,package_dir/1
,registry_checksum/2
,find_highest_matching/4
@ -34,7 +35,7 @@ close_packages() ->
catch ets:delete(?PACKAGE_TABLE).
load_and_verify_version(State) ->
RegistryDir = package_dir(State),
RegistryDir = registry_dir(State),
case ets:file2tab(filename:join(RegistryDir, ?INDEX_FILE)) of
{ok, _} ->
case ets:lookup_element(?PACKAGE_TABLE, package_index_version, 2) of
@ -57,13 +58,25 @@ deps(Name, Vsn, State) ->
throw(?PRV_ERROR({missing_package, ec_cnv:to_binary(Name), ec_cnv:to_binary(Vsn)}))
end.
package_dir(State) ->
registry_dir(State) ->
CacheDir = rebar_dir:global_cache_dir(State),
CDN = rebar_state:get(State, rebar_packages_cdn, ?DEFAULT_CDN),
{ok, {_, _, Host, _, Path, _}} = http_uri:parse(CDN),
CDNHostPath = lists:reverse(string:tokens(Host, ".")),
CDNPath = tl(filename:split(Path)),
PackageDir = filename:join([CacheDir, "hex"] ++ CDNHostPath ++ CDNPath ++ ["packages"]),
case rebar_state:get(State, rebar_packages_cdn, ?DEFAULT_CDN) of
?DEFAULT_CDN ->
RegistryDir = filename:join([CacheDir, "hex", "default"]),
ok = filelib:ensure_dir(filename:join(RegistryDir, "placeholder")),
RegistryDir;
CDN ->
{ok, {_, _, Host, _, Path, _}} = http_uri:parse(CDN),
CDNHostPath = lists:reverse(string:tokens(Host, ".")),
CDNPath = tl(filename:split(Path)),
RegistryDir = filename:join([CacheDir, "hex"] ++ CDNHostPath ++ CDNPath),
ok = filelib:ensure_dir(filename:join(RegistryDir, "placeholder")),
RegistryDir
end.
package_dir(State) ->
RegistryDir = registry_dir(State),
PackageDir = filename:join([RegistryDir, "packages"]),
ok = filelib:ensure_dir(filename:join(PackageDir, "placeholder")),
PackageDir.

+ 2
- 2
src/rebar_pkg_resource.erl Прегледај датотеку

@ -34,7 +34,7 @@ download(TmpDir, Pkg={pkg, Name, Vsn}, State) ->
Url = string:join([CDN, Package], "/"),
cached_download(TmpDir, CachePath, Pkg, Url, etag(CachePath), State).
cached_download(TmpDir, CachePath, Pkg, Url, ETag, State) ->
cached_download(TmpDir, CachePath, Pkg={pkg, Name, Vsn}, Url, ETag, State) ->
case request(Url, ETag) of
{ok, cached} ->
serve_from_cache(TmpDir, CachePath, Pkg, State);
@ -44,7 +44,7 @@ cached_download(TmpDir, CachePath, Pkg, Url, ETag, State) ->
?DEBUG("Download ~s error, using ~s from cache", [Url, CachePath]),
serve_from_cache(TmpDir, CachePath, Pkg, State);
error ->
request_failed
{fetch_fail, Name, Vsn}
end.
serve_from_cache(TmpDir, CachePath, Pkg, State) ->

+ 8
- 5
src/rebar_prv_update.erl Прегледај датотеку

@ -35,11 +35,11 @@ init(State) ->
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
?INFO("Updating package index...", []),
try
RegistryDir = rebar_packages:package_dir(State),
RegistryDir = rebar_packages:registry_dir(State),
filelib:ensure_dir(filename:join(RegistryDir, "dummy")),
HexFile = filename:join(RegistryDir, "registry"),
?INFO("Updating package registry...", []),
TmpDir = ec_file:insecure_mkdtemp(),
TmpFile = filename:join(TmpDir, "packages.gz"),
@ -50,7 +50,7 @@ do(State) ->
{ok, Data} = file:read_file(TmpFile),
Unzipped = zlib:gunzip(Data),
ok = file:write_file(HexFile, Unzipped),
?INFO("Writing registry to ~s", [rebar_file_utils:replace_home_dir(HexFile)]),
hex_to_index(State),
ok
catch
@ -71,11 +71,13 @@ is_supported(<<"rebar3">>) -> true;
is_supported(_) -> false.
hex_to_index(State) ->
RegistryDir = rebar_packages:package_dir(State),
RegistryDir = rebar_packages:registry_dir(State),
HexFile = filename:join(RegistryDir, "registry"),
try ets:file2tab(HexFile) of
{ok, Registry} ->
try
PackageIndex = filename:join(RegistryDir, "packages.idx"),
?INFO("Generating package index...", []),
(catch ets:delete(?PACKAGE_TABLE)),
ets:new(?PACKAGE_TABLE, [named_table, public]),
ets:foldl(fun({{Pkg, PkgVsn}, [Deps, Checksum, BuildTools | _]}, _) when is_list(BuildTools) ->
@ -93,7 +95,8 @@ hex_to_index(State) ->
end, true, Registry),
ets:insert(?PACKAGE_TABLE, {package_index_version, ?PACKAGE_INDEX_VERSION}),
ets:tab2file(?PACKAGE_TABLE, filename:join(RegistryDir, "packages.idx")),
?INFO("Writing index to ~s", [rebar_file_utils:replace_home_dir(PackageIndex)]),
ets:tab2file(?PACKAGE_TABLE, PackageIndex),
true
after
catch ets:delete(Registry)

+ 2
- 1
test/rebar_pkg_SUITE.erl Прегледај датотеку

@ -148,7 +148,7 @@ bad_disconnect(Config) ->
Tmp = ?config(tmp_dir, Config),
{Pkg,Vsn} = ?config(pkg, Config),
State = ?config(state, Config),
?assertEqual(request_failed,
?assertEqual({fetch_fail, Pkg, Vsn},
rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn}, State)).
@ -183,6 +183,7 @@ mock_config(Name, Config) ->
meck:expect(rebar_dir, global_cache_dir, fun(_) -> CacheRoot end),
meck:new(rebar_packages, [passthrough]),
meck:expect(rebar_packages, registry_dir, fun(_) -> CacheDir end),
meck:expect(rebar_packages, package_dir, fun(_) -> CacheDir end),
rebar_prv_update:hex_to_index(rebar_state:new()),

Loading…
Откажи
Сачувај