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/directory_tester.erl

    r93 r95  
    44 
    55-module (directory_tester). 
    6 -export ([init/1, init/3]). 
    7 -export ([run_once/1, run_once/3]). 
     6-export ([init/1, init/2, init/3]). 
     7-export ([run_once/1, run_once/2, run_once/3]). 
     8-export ([slave_node/1]). 
     9-export ([read_args/1]). 
    810 
    9 run_once ([Directory, Node | Include_directories]) when is_list (Node) -> 
    10     Options = [{i, I} || I <- Include_directories], 
    11     run_once (Directory, list_to_atom (Node), [{compiler, Options}]). 
     11run_once (Args) -> 
     12    {Directories, Options} = read_args (Args), 
     13    run_once (Directories, Options). 
    1214 
    13 run_once (Directory, Node, Options) -> 
    14     run (start (Directory, Node, Options)). 
     15run_once (Directories, All_options) -> 
     16    Slave_args = proplists: get_value (slave, All_options), 
     17    Options = proplists: delete (slave, All_options), 
     18    run_once (Directories, slave (Slave_args), Options). 
    1519 
    16 init ([Directory, Node | Include_directories]) when is_list (Node) -> 
    17     Options = [{i, I} || I <- Include_directories], 
    18     init (Directory, list_to_atom (Node), [{compiler, Options}]). 
     20run_once (Directories, Node, Options) -> 
     21    run (start (Directories, Node, Options)). 
     22 
     23init (Args) -> 
     24    {Directories, Options} = read_args (Args), 
     25    init (Directories, Options). 
     26 
     27init (Directories, All_options) -> 
     28    Slave_args = proplists: get_value (slave, All_options), 
     29    Options = proplists: delete (slave, All_options), 
     30    init (Directories, slave (Slave_args), Options).  
    1931     
    20 init (Directory, Node, Options) -> 
    21     loop (start (Directory, Node, Options)). 
     32init (Directories, Node, Options) -> 
     33    loop (start (Directories, Node, Options)). 
    2234 
    23 start (Directory, Node, Options) -> 
     35slave (undefined) -> 
     36    {Host, Name} = slave_node (node ()), 
     37    {ok, Slave} = slave: start_link (Host, Name), 
     38    Slave; 
     39slave (Args) when is_list (Args) -> 
     40    {Host, Name} = slave_node (node ()), 
     41    {ok, Slave} = slave: start_link (Host, Name, Args), 
     42    Slave. 
     43 
     44start (Directories, Node, Options) -> 
    2445    Compiler_options = options (compiler, Options), 
    25     Compiler_args = [notify_me (compiler), Directory, Compiler_options], 
     46    Compiler_args = [notify_me (compiler), Directories, Compiler_options], 
    2647    Compiler = spawn_link (compiler, init, Compiler_args), 
    2748    Tester = spawn_link (tester, init, [notify_me (tester), Node]), 
     
    2950    Printer = spawn_link (text_printer, init, [standard_io]), 
    3051    {Compiler, Tester, Printer}. 
     52 
     53 
     54slave_node (nonode@nohost) -> 
     55    not_alive; 
     56slave_node (Node) -> 
     57    Node_string = atom_to_list (Node), 
     58    [Name, Host_string] = string: tokens (Node_string, "@"), 
     59    Slave_name_string = Name ++ "_extremeforge_slave", 
     60    Slave_name = list_to_atom (Slave_name_string), 
     61    Host = list_to_atom (Host_string), 
     62    {Host, Slave_name}. 
     63 
     64read_args (Args) when length (Args) == 1 -> 
     65    [Dirs] = read_path_args (Args), 
     66    {Dirs, []}; 
     67read_args (Args) when length (Args) == 2 -> 
     68    [Dirs, Incs] = read_path_args (Args), 
     69    Options = [{compiler, [{i, I} || I <- Incs]}], 
     70    {Dirs, Options}; 
     71read_args ([Arg1, Arg2, Slave_args]) -> 
     72    {Dirs, C_options} = read_args ([Arg1, Arg2]), 
     73    {Dirs, [{slave, Slave_args} | C_options]}. 
     74 
     75read_path_args (Paths) -> 
     76    Dirs = [string: tokens (P, ":") || P <- Paths], 
     77    Not_dir = [D || D <- lists: concat (Dirs), not filelib: is_dir (D)], 
     78    {not_dir, []} = {not_dir, Not_dir}, 
     79    Dirs. 
    3180 
    3281notify_me (Atom) -> 
Note: See TracChangeset for help on using the changeset viewer.