Browse Source

superfast apps ordering

Maxim Sokhatsky 10 years ago
parent
commit
7601bdbf02
7 changed files with 46 additions and 26 deletions
  1. BIN
      mad
  2. 8 0
      src/mad.erl
  3. 1 1
      src/mad_bundle.erl
  4. 0 16
      src/mad_deps.erl
  5. 32 7
      src/mad_plan.erl
  6. 3 2
      src/mad_run.erl
  7. 2 0
      src/mad_utils.erl

BIN
mad


+ 8 - 0
src/mad.erl

@@ -71,6 +71,14 @@ attach(Cwd,ConfigFileName,Config,Params) ->
 %    io:format("Attach Params: ~p~n",[Params]),
     mad_run:attach(Params).
 
+stop(Cwd,ConfigFileName,Config,Params) ->
+    io:format("Stop Params: ~p~n",[Params]),
+    mad_run:stop(Params).
+
+release(Cwd,ConfigFileName,Config,Params) ->
+    io:format("Release Params: ~p~n",[Params]),
+    mad_release:main(Params).
+
 help(Reason, Data) -> help(io_lib:format("~s ~p", [Reason, Data])).
 help(Msg) -> io:format("Error: ~s~n~n", [Msg]), help().
 help() ->

+ 1 - 1
src/mad_bundle.erl

@@ -18,4 +18,4 @@ static() -> Name = "static.gz",
 beams() ->
     [ { filename:basename(F), read_file(F) } || F <-
         lists:concat([filelib:wildcard(X)||X <- 
-        [ "ebin/*","deps/*/ebin/*","apps/*/ebin/*","sys.config",".applist"]])].
+        [ "ebin/*","{apps,deps}/*/ebin/*","sys.config",".applist"]])].

+ 0 - 16
src/mad_deps.erl

@@ -12,7 +12,6 @@ fetch(Cwd, Config, ConfigFile, [H|T]) ->
                          {_Cmd, _Url, _Co, _} ->
                              {_Cmd, _Url, _Co}
                      end,
-    check_host_ip_addr(Uri),
     Cmd1 = atom_to_list(Cmd),
     Cache = mad_utils:get_value(cache, Config, deps_fetch),
     case get(Name) of
@@ -70,18 +69,3 @@ get_publisher(Uri) ->
         _ -> case string:tokens(Uri,":/") of
                 [_Server,Publisher,_Repo] -> Publisher;
                 _ -> exit(error) end end.
-
-check_host_ip_addr(Uri) ->
-    {_, {_, _, RepoHost, _, _, _}} = http_uri:parse(Uri, [{scheme_defaults, [{git, 9418}|http_uri:scheme_defaults()]}]),
-    {GetAddrResult, GetAddrData} = inet:getaddr(RepoHost, inet),
-    case GetAddrResult of
-        error -> 
-            {GetAddrResult6, GetAddrData6} = inet:getaddr(RepoHost, inet6),
-            case GetAddrResult6 of
-                error -> 
-                io:format("==> get dependency errors: ipv4 ~p, ipv6 ~p~n", [GetAddrData, GetAddrData6]),
-                exit(error);
-                _ -> true
-            end;
-        _ -> true
-    end.

+ 32 - 7
src/mad_plan.erl

@@ -1,13 +1,38 @@
 -module(mad_plan).
--copyright('Vladimir Kirillov').
+-author('Maxim Sokhatsky').
 -compile(export_all).
 
+sort(Pairs) -> iterate(Pairs, [], all(Pairs)).
+iterate([], L, All) -> {ok,remove_duplicates(L ++ subtract(All, L))};
+iterate(Pairs, L, All) ->
+    case subtract(lhs(Pairs), rhs(Pairs)) of
+        []  -> io:format("Cycling Apps: ~p~n\r", [Pairs]);
+        Lhs -> iterate(remove_pairs(Lhs, Pairs), L ++ Lhs, All) end.
+
+remove_pairs(L1, L2) -> [All || All={X, _Y} <- L2, not lists:member(X, L1)].
+all(L) -> lhs(L) ++ rhs(L).
+lhs(L) -> [X || {X, _} <- L].
+rhs(L) -> [Y || {_, Y} <- L].
+subtract(L1, L2) -> [X || X <- L1, not lists:member(X, L2)].
+remove_duplicates([]) -> [];
+remove_duplicates([H|T]) ->
+    case lists:member(H, T) of
+          true  -> remove_duplicates(T);
+          false -> [H|remove_duplicates(T)] end.
+
+orderapps() ->
+    Pairs = lists:flatten([ case 
+       file:consult(F) of
+         {ok,[{application,Name,Opt}]} -> 
+              Apps = proplists:get_value(applications,Opt,[]),
+              [ { A,Name} || A <- Apps ];
+         {error,_} -> skip
+    end || F <- filelib:wildcard("{apps,deps}/*/ebin/*.app"), not filelib:is_dir(F) ]),
+    {ok,Sorted} = sort(Pairs),
+    Sorted.
+
 main(AppList) ->
-    Relconfig = {sys, [{lib_dirs,["apps","deps"]},
-                       {rel,"node","1",AppList}, {boot_rel,"node"} ]},
-    {ok, Server} = reltool:start_server([{config, Relconfig}]),
-    {ok, {release, _Node, _Erts, Apps}} = Release = reltool_server:get_rel(Server, "node"),
-    Ordered = [element(1, A) || A <- Apps] -- mad_repl:disabled(),
-    io:format("Ordered: ~p~n\r",[Release]),
+    Ordered = orderapps(),
+    io:format("Ordered: ~p~n\r",[Ordered]),
     file:write_file(".applist",io_lib:format("~w",[Ordered])),
     Ordered.

+ 3 - 2
src/mad_run.erl

@@ -12,5 +12,6 @@ start(Params) ->
          false -> io:format("Shell Error: ~s~n\r",[binary_to_list(X)]) end.
 
 attach(Params) ->
-    io:format("to_erl .devbox/~n"),
-    os:cmd("sh -c \"exec to_erl .devbox/\"").
+    io:format("to_erl .devbox/~n").
+
+stop(_) -> ok.

+ 2 - 0
src/mad_utils.erl

@@ -74,6 +74,8 @@ atomize("app"++_) -> app;
 atomize("lib"++_) -> lib;
 atomize("sta"++_) -> start;
 atomize("att"++_) -> attach;
+atomize("sto"++_) -> stop;
+atomize("rel"++_) -> release;
 atomize(Else) -> Else.
 
 atomize_params_commands(Params) -> atomize_params_commands(Params,[]).