Browse Source

fix fs listen only apps/deps dirs, not logs/erlang.pipe

221V 3 years ago
parent
commit
469d15c3d9
3 changed files with 56 additions and 21 deletions
  1. 8 3
      README.md
  2. 26 9
      src/active.erl
  3. 22 9
      src/active_compile_files.erl

+ 8 - 3
README.md

@@ -32,11 +32,16 @@ Usage
 
 On Mac/Linux/Windows just put this app into your apps|deps dir;  
 add next code into your sys.config  
-for compiling erlydtl templates in apps/yor_app/priv/templates/  
+for fs listen your apps/deps dirs  
+and active compiling erlydtl templates in apps/yor_app/priv/templates/  
 
 ```
-{active,
- [{compile_on_templates, true}]}
+{fs,
+ [{backwards_compatible, false}]},
+ 
+ {active,
+ [{compile_on_templates, true},
+  {listen_paths, ["apps", "deps"]}]}
 ```
 
 NOTE: on Linux please install inotify-tools.

+ 26 - 9
src/active.erl

@@ -9,7 +9,20 @@
 start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
 
 init([]) ->
-  fs:subscribe(),
+  case {application:get_env(fs, backwards_compatible, false),
+        application:get_env(active, listen_paths, [])} of
+    %{true, []} -> fs:subscribe();
+    {true, _} -> fs:subscribe();
+    {false, []} -> fs:start_link(default_fs), fs:subscribe();
+    {false, Paths} ->
+      lists:foldl(fun(Path, ok)->
+        Name = erlang:list_to_atom(Path),
+        fs:start_link(Name, Path),
+        fs:subscribe(Name),
+        ok
+        end, ok, Paths)
+  end,
+  
   erlang:process_flag(priority, low),
   gen_server:cast(erlang:self(), recompile_all),
   {ok, #state{last=fresh, root=fs:path()}}.
@@ -128,15 +141,19 @@ compile(App, Rest, Path) ->
   end.
 
 load_ebin(_App, EName) ->
-  case lists:reverse(EName) of
-    "maeb." ++ Tail ->
-      Name = lists:reverse(Tail),
-      LoadRes = do_load_ebin(erlang:list_to_atom(lists:flatten(Name))),
-      io:format("Active: module loaded: ~p~n\n\r", [LoadRes]),
-      active_events:notify_reload(LoadRes);
-    "#aeb." ++ _ -> ok;
+  case EName of
+    "." ++ _ -> ok;
     _ ->
-      io:format("Active: unknown BEAM file: ~p", [EName]), ok
+      case lists:reverse(EName) of
+        "maeb." ++ Tail ->
+          Name = lists:reverse(Tail),
+          LoadRes = do_load_ebin(erlang:list_to_atom(lists:flatten(Name))),
+          io:format("Active: module loaded: ~p~n\n\r", [LoadRes]),
+          active_events:notify_reload(LoadRes);
+        "#aeb." ++ _ -> ok;
+        _ ->
+          io:format("Active: unknown BEAM file: ~p", [EName]), ok
+      end
   end.
 
 do_load_ebin(Module) ->

+ 22 - 9
src/active_compile_files.erl

@@ -99,25 +99,38 @@ compile_one_erl(File, Path2, Emakefile_Settings) ->
           [report, return, {i, [Inc_Dir]}, {outdir, Ebin_Dir}]
       end,
       
+      Module_Name = erlang:list_to_atom(lists:flatten(string:replace(File, ".erl", ""))),
+      %io:format("~Module_Name: ~p~n", [Module_Name]),
+      
       io:format("~nCompiling ~p: ", [File_Path]),
       
-      case compile:file(File_Path, Options) of
-        error ->
-          io:format("~nError!~n", []);
+      RZ = compile:file(File_Path, Options),
+      %io:format("~nRZ: ~p~n",[RZ]),
+      
+      case RZ of
+        %error ->
+        %  io:format("~nError!~n", []);
         {error, [], Warning} ->
           io:format("~nWarning: ~p~n", [Warning]);
         
-        {error, [{File_Path, [{1,erl_lint,undefined_module}]}], []} ->
+        {error, [{File_Path, [{1, erl_lint, undefined_module}]}], []} ->
           ok; % do not show message "undefined_module" when all ok
         
         {error, Error, Warning} ->
           io:format("~nErrors and warnings:~n ~p~n ~p~n", [Error, Warning]);
         
-        _ ->
-          io:format("ok~n", []),
-          Module = erlang:list_to_atom(lists:flatten(string:replace(File, ".erl", ""))),
-          code:purge(Module),
-          code:load_file(Module)
+        {ok, Module_Name} ->
+          io:format("ok - (no warnings)~n", []),
+          code:purge(Module_Name),
+          code:load_file(Module_Name);
+        
+        {ok, Module_Name, Warnings} ->
+          case Warnings of
+            [] -> io:format("ok (no warnings)~n", []);
+            _ -> io:format("ok, warnings:~n~p~n", [Warnings])
+          end,
+          code:purge(Module_Name),
+          code:load_file(Module_Name)
       end,
       ok;
     _ ->