Changeset 95 for trunk/src/compiler.erl


Ignore:
Timestamp:
04/11/10 19:19:02 (22 months ago)
Author:
dom
Message:

Two improvements (and new start API): multiple directories watched, and slave started if no node given

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/compiler.erl

    r94 r95  
    88-export ([reset_includes/2]). 
    99 
    10 init (Notify, Dir) -> 
    11     init (Notify, Dir, []). 
     10init (Notify, Dirs) -> 
     11    init (Notify, Dirs, []). 
    1212 
    13 init (Notify, Dir, Options) -> 
     13init (Notify, Dirs, Options) -> 
     14    Watchers = lists: foldl (fun watcher/2, [], Dirs), 
     15    Includes = [{i, D} || D <- Dirs], 
     16    State = {dict: new (), dict: new (), [], [], Includes ++ Options}, 
     17    loop (Notify, Watchers, State). 
     18 
     19watcher (Dir, Acc) -> 
    1420    Args = [Dir, notify_me ()], 
    1521    Watcher = spawn_link (directory_watcher, init_recursive, Args), 
    16     State = {dict: new (), dict: new (), [], [], [{i, Dir} | Options]}, 
    17     loop (Notify, Watcher, State). 
    18  
    19 loop (Notify, Watcher, State) -> 
     22    [Watcher | Acc]. 
     23     
     24loop (Notify, Watchers, State) -> 
    2025    receive 
    2126        check -> 
    22             Watcher ! check, 
     27            [W ! check || W <- Watchers], 
    2328            {Modules, Includes, Binaries, Removed, Options} = State, 
    24             Received = receive_files (Watcher, Modules, Includes), 
     29            Received = receive_files (Modules, Includes), 
    2530            {New_modules, New_includes} = Received, 
    2631            New_options = reset_includes (New_includes, Options), 
    27             New_state = {New_modules, New_includes, Binaries, Removed, New_options}, 
     32            New_state = {New_modules, New_includes, Binaries, 
     33                         Removed, New_options}, 
    2834            Last_state = 
    2935                if 
     
    3339                        New_state 
    3440                end, 
    35             loop (Notify, Watcher, Last_state); 
     41            loop (Notify, Watchers, Last_state); 
    3642        {Pid, stop} -> 
    3743            Pid ! {self (), bye} 
    3844    end. 
    3945 
    40 receive_files (Watcher, Modules, Includes) -> 
     46receive_files (Modules, Includes) -> 
    4147%%          Includes = sets: from_list ([D || {i, D} <- Options]), 
    4248    receive 
    43         {Watcher, {{file, ".erl"}, File, Event}} -> 
    44             receive_files (Watcher, dict: store (File, Event, Modules), Includes); 
    45         {Watcher, {{file, ".hrl"}, File, Event}} -> 
    46             receive_files (Watcher, Modules, dict: store (File, Event, Includes)); 
    47         {Watcher, _} -> 
    48             receive_files (Watcher, Modules, Includes) 
     49        {watcher, {{file, ".erl"}, File, Event}} -> 
     50            receive_files (dict: store (File, Event, Modules), Includes); 
     51        {watcher, {{file, ".hrl"}, File, Event}} -> 
     52            receive_files (Modules, dict: store (File, Event, Includes)); 
     53        {watcher, _} -> 
     54            receive_files (Modules, Includes) 
    4955    after 500 -> 
    5056            {Modules, Includes} 
     
    9298notify_me () -> 
    9399    Self = self (), 
    94     fun (E) -> Self ! {self (), E} end. 
     100    fun (E) -> Self ! {watcher, E} end. 
    95101             
    96102totals (Modules) -> 
Note: See TracChangeset for help on using the changeset viewer.