Parcourir la source

use locks if exists

pull/3/head
Tristan Sloughter il y a 10 ans
Parent
révision
393abe92d0
5 fichiers modifiés avec 49 ajouts et 39 suppressions
  1. +9
    -2
      src/rebar.erl
  2. +2
    -8
      src/rebar_lock.erl
  3. +1
    -2
      src/rebar_prv_app_builder.erl
  4. +36
    -26
      src/rebar_prv_install_deps.erl
  5. +1
    -1
      src/rebar_state.erl

+ 9
- 2
src/rebar.erl Voir le fichier

@ -131,6 +131,13 @@ init_config({Options, _NonOptArgs}) ->
rebar_config:consult_file(ConfigFile)
end,
Config1 = case rebar_config:consult_file(?LOCK_FILE) of
[D] ->
[{locks, D} | Config];
_ ->
Config
end,
%% If $HOME/.rebar/config exists load and use as global config
GlobalConfigFile = filename:join([os:getenv("HOME"), ".rebar", "config"]),
State = case filelib:is_regular(GlobalConfigFile) of
@ -138,9 +145,9 @@ init_config({Options, _NonOptArgs}) ->
?DEBUG("Load global config file ~p~n",
[GlobalConfigFile]),
rebar_config:consult_file(GlobalConfigFile),
rebar_state:new(GlobalConfigFile, Config);
rebar_state:new(GlobalConfigFile, Config1);
false ->
rebar_state:new(Config)
rebar_state:new(Config1)
end,
%% Initialize vsn cache

+ 2
- 8
src/rebar_lock.erl Voir le fichier

@ -1,13 +1,7 @@
-module(rebar_lock).
-export([update/3]).
-export([create/1]).
create(State) ->
LockDeps = [],
ok = file:write_file("./rebar.lock", io_lib:format("~p.~n", [LockDeps])).
update(State, App, Source) ->
New = rebar_fetch:new(rebar_app_info:dir(App), rebar_app_info:name(App), rebar_app_info:original_vsn(App), Source),
{ok, [Terms]} = file:consult("./rebar.lock"),
LockDeps = lists:keyreplace(rebar_app_info:name(App), 1, Terms, New),
LockDeps = rebar_state:get(State, locks, []),
ok = file:write_file("./rebar.lock", io_lib:format("~p.~n", [LockDeps])).

+ 1
- 2
src/rebar_prv_app_builder.erl Voir le fichier

@ -37,8 +37,7 @@ do(State) ->
_AppInfo1 = build(State, AppInfo)
end, Apps),
LockDeps = rebar_state:get(State, deps, []),
ok = file:write_file("./rebar.lock", io_lib:format("~p.~n", [LockDeps])),
rebar_lock:create(State),
{ok, State}.
build(State, AppInfo) ->

+ 36
- 26
src/rebar_prv_install_deps.erl Voir le fichier

@ -66,32 +66,38 @@ init(State) ->
do(State) ->
%% Read in package index and dep graph
{Packages, Graph} = rebar_packages:get_packages(State),
case rebar_state:get(State, deps, []) of
case rebar_state:get(State, locks, []) of
[] ->
{ok, State};
Deps ->
%% Split source deps form binary deps, needed to keep backwards compatibility
{SrcDeps, Goals} = parse_deps(Deps),
case update_src_deps(State, SrcDeps, Goals, []) of
{State1, SrcDeps1, [], Locked} ->
{ok, rebar_state:set(State1, deps, Locked)};
{State1, SrcDeps1, Goals1, Locked} ->
{ok, Solved} = rlx_depsolver:solve(Graph, Goals1),
M = lists:map(fun({Name, Vsn}) ->
FmtVsn = ec_cnv:to_binary(rlx_depsolver:format_version(Vsn)),
{ok, P} = dict:find({Name, FmtVsn}, Packages),
Link = proplists:get_value(<<"link">>, P),
#dep{name=Name,
vsn=FmtVsn,
source={Name
,FmtVsn
,Link}}
end, Solved),
{State2, Deps1, Locked2} = update_deps(State1, M),
State3 = rebar_state:set(State2, deps, Locked++Locked2),
{ok, rebar_state:set(State3, goals, Goals1)}
end
case rebar_state:get(State, deps, []) of
[] ->
{ok, State};
Deps ->
%% Split source deps form binary deps, needed to keep backwards compatibility
{SrcDeps, Goals} = parse_deps(Deps),
case update_src_deps(State, SrcDeps, Goals, []) of
{State1, SrcDeps1, [], Locked} ->
{ok, rebar_state:set(State1, locks, Locked)};
{State1, SrcDeps1, Goals1, Locked} ->
{ok, Solved} = rlx_depsolver:solve(Graph, Goals1),
M = lists:map(fun({Name, Vsn}) ->
FmtVsn = ec_cnv:to_binary(rlx_depsolver:format_version(Vsn)),
{ok, P} = dict:find({Name, FmtVsn}, Packages),
Link = proplists:get_value(<<"link">>, P),
#dep{name=Name,
vsn=FmtVsn,
source={Name
,FmtVsn
,Link}}
end, Solved),
{State2, Deps1, Locked2} = update_deps(State1, M),
State3 = rebar_state:set(State2, locks, Locked++Locked2),
{ok, rebar_state:set(State3, goals, Goals1)}
end
end;
Locks ->
Locks1 = [new(Lock) || Lock <- Locks],
{State2, _, _} = update_deps(State, Locks1),
{ok, State2}
end.
%% set REBAR_DEPS_DIR and ERL_LIBS environment variables
@ -124,8 +130,12 @@ get_deps_dir(DepsDir, App) ->
%% Internal functions
%% ===================================================================
new({Name, Vsn, Source})->
new({Name, Vsn, Source}) when is_tuple(Source) ->
#dep{name=ec_cnv:to_binary(Name), vsn=ec_cnv:to_binary(Vsn), source=Source};
new({Name, Vsn, Source}) when is_binary(Source) ->
#dep{name=ec_cnv:to_binary(Name)
,vsn=ec_cnv:to_binary(Vsn)
,source={ec_cnv:to_binary(Name), ec_cnv:to_binary(Vsn), Source}};
new(Name) ->
#dep{name=ec_cnv:to_binary(Name)}.

+ 1
- 1
src/rebar_state.erl Voir le fichier

@ -59,7 +59,7 @@ new(ParentState, Config, Dir) ->
_Opts = ParentState#state_t.opts,
LocalOpts = case rebar_config:consult_file(?LOCK_FILE) of
{ok, [D]} ->
[{lock_deps, D} | Config];
[{locks, D} | Config];
_ ->
Config
end,

Chargement…
Annuler
Enregistrer