diff options
Diffstat (limited to 'src/rebar_prv_update.erl')
-rw-r--r-- | src/rebar_prv_update.erl | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/src/rebar_prv_update.erl b/src/rebar_prv_update.erl index f48b507..78c7c34 100644 --- a/src/rebar_prv_update.erl +++ b/src/rebar_prv_update.erl @@ -30,22 +30,42 @@ init(State) -> {ok, State1}. -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | relx:error(). -do(Config) -> - [Name] = rebar_state:command_args(Config), - ?INFO("Updating ~s~n", [Name]), +do(State) -> + case rebar_state:command_args(State) of + [Name] -> + ?INFO("Updating ~s~n", [Name]), - DepsDir = rebar_deps:get_deps_dir(Config), - Deps = rebar_state:get_local(Config, deps, []), - {_, _, Source} = lists:keyfind(list_to_atom(Name), 1, Deps), - TargetDir = rebar_deps:get_deps_dir(DepsDir, Name), - rebar_fetch:update_source1(TargetDir, Source), + DepsDir = rebar_deps:get_deps_dir(State), + Deps = rebar_state:get_local(State, deps, []), + {_, _, Source} = lists:keyfind(list_to_atom(Name), 1, Deps), + TargetDir = rebar_deps:get_deps_dir(DepsDir, Name), + rebar_fetch:update_source1(TargetDir, Source), - [App] = rebar_app_discover:find_apps([TargetDir]), + [App] = rebar_app_discover:find_apps([TargetDir]), - {ok, AppInfo1} = rebar_otp_app:compile(Config, App), - Config1 = rebar_state:replace_app(Config, rebar_app_info:name(AppInfo1), AppInfo1), - rebar_erlc_compiler:compile(Config, rebar_app_info:dir(AppInfo1)), + {ok, AppInfo1} = rebar_otp_app:compile(State, App), + State1 = rebar_state:replace_app(State, rebar_app_info:name(AppInfo1), AppInfo1), + rebar_erlc_compiler:compile(State, rebar_app_info:dir(AppInfo1)), - %update_lock_file(Config, AppInfo1, Source), + %update_lock_file(State, AppInfo1, Source), - {ok, Config}. + {ok, State}; + [] -> + ?INFO("Updating package index...", []), + Url = rebar_state:get(State, rebar_packages_url, ""), + ec_file:mkdir_p(filename:join([os:getenv("HOME"), ".rebar"])), + PackagesFile = filename:join([os:getenv("HOME"), ".rebar", "packages"]), + {ok, RequestId} = httpc:request(get, {Url, []}, [], [{stream, PackagesFile}, {sync, false}]), + wait(RequestId, State) + end. + +wait(RequestId, State) -> + receive + {http, {RequestId, saved_to_file}} -> + io:format("~n"), + {ok, State} + after + 500 -> + io:format("."), + wait(RequestId, State) + end. |