Changeset 58 for trunk


Ignore:
Timestamp:
07/07/09 05:37:00 (3 years ago)
Author:
dom
Message:

directory_watcher now handles a file becoming a directory and vice-versa

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/directory_watcher.erl

    r57 r58  
    8282            notify (Pid, Event), 
    8383            loop_recursive (Directory, Pid, [Watcher | Watchers]); 
    84         {?MODULE, Watcher, {directory, _, {error, enoent}}} -> 
     84        {?MODULE, Watcher, {directory, _, {error, _}}} -> 
    8585            Watcher ! stop, 
    8686            loop_recursive (Directory, Pid, Watchers -- [Watcher]); 
     
    101101compare (Pid, [X | Xs], [X | Ys]) -> 
    102102    compare (Pid, Xs, Ys); 
    103 compare (Pid, [{F, _} | Xs], [{F, _} | Ys]) -> 
     103compare (Pid, [{F, {regular, _}} | Xs], [{F, {regular, _}} | Ys]) -> 
    104104    report_changed (Pid, F), 
     105    compare (Pid, Xs, Ys); 
     106compare (Pid, [{F, _}=X | Xs], [{F, _} | Ys]) -> 
     107    report_lost (Pid, X), 
     108    report_found (Pid, F), 
    105109    compare (Pid, Xs, Ys); 
    106110compare (Pid, [X, {F, V} | Xs], [{F, W} | Ys]) -> 
  • trunk/src/directory_watcher_test.erl

    r57 r58  
    1313-export ([directories_can_be_removed_when_recursive/0]). 
    1414-export ([change_from_directory_to_file/0]). 
     15-export ([change_from_directory_to_file_when_recursive/0]). 
     16-export ([change_from_file_to_directory/0]). 
     17-export ([change_from_file_to_directory_when_recursive/0]). 
    1518 
    1619tests_from_empty () -> 
     
    4649 
    4750directories_can_be_removed_when_recursive () -> 
    48     ok = fixtures: use_tree (tree (), fun directories_can_be_removed_when_recursive/2). 
     51    F = fun directories_can_be_removed_when_recursive/2, 
     52    ok = fixtures: use_tree (tree (), F). 
    4953 
    5054change_from_directory_to_file () -> 
     
    5256    ok = fixtures: use_tree (Tree, fun change_from_directory_to_file/2). 
    5357 
     58change_from_file_to_directory () -> 
     59    Tree = [{file, "foo", []}], 
     60    ok = fixtures: use_tree (Tree, fun change_from_file_to_directory/2). 
     61 
     62change_from_file_to_directory_when_recursive () -> 
     63    F = fun change_from_file_to_directory_when_recursive/2, 
     64    ok = fixtures: use_tree ([{file, "foo", "yo"}], F). 
     65 
     66change_from_directory_to_file_when_recursive () -> 
     67    F = fun change_from_directory_to_file_when_recursive/2, 
     68    ok = fixtures: use_tree (tree (), F). 
     69     
    5470tree () -> 
    5571    Subsub = {directory, "subsubdir", 
     
    7692    receive_all (), 
    7793    Subdir = filename: join ([Dir, "subdir", "subsubdir"]), 
    78     fixtures: delete_tree (Subdir),  
     94    ok = fixtures: delete_tree (Subdir),  
    7995    Watcher ! check, 
    8096    File = filename: join (Subdir, "subsubfile.sub"), 
     
    194210 
    195211change_from_directory_to_file (Root, [{directory, Name, []}]) -> 
    196     ok. 
    197 %%     Watcher = spawn_link (directory_watcher, init, [Root, self ()]), 
    198 %%     receive_all (), 
    199 %%     Path = filename: join (Root, Name), 
    200 %%     ok = file: del_dir (Path), 
    201 %%     ok = file: write_file (Path, list_to_binary ("hello")), 
    202 %%     Watcher ! check, 
    203 %%     [{directory, "Name", lost} 
     212    Watcher = spawn_link (directory_watcher, init, [Root, self ()]), 
     213    receive_all (), 
     214    Path = filename: join (Root, Name), 
     215    ok = file: del_dir (Path), 
     216    ok = file: write_file (Path, list_to_binary ("hello")), 
     217    Watcher ! check, 
     218    [{directory, Path, lost}, {{file, ""}, Path, found}] = receive_all (), 
     219    ok. 
     220 
     221change_from_file_to_directory (Root, [{file, Name, []}]) -> 
     222    Watcher = spawn_link (directory_watcher, init, [Root, self ()]), 
     223    receive_all (), 
     224    Path = filename: join (Root, Name), 
     225    ok = file: delete (Path), 
     226    ok = file: make_dir (Path), 
     227    Watcher ! check, 
     228    [{{file, ""}, Path, lost}, {directory, Path, found}] = receive_all (), 
     229    ok. 
     230 
     231change_from_file_to_directory_when_recursive (Root, [{file, Name, _}]) -> 
     232    Watcher = spawn_link (directory_watcher, init_recursive, [Root, self ()]), 
     233    receive_all (), 
     234    Path = filename: join (Root, Name), 
     235    file: delete (Path), 
     236    ok = file: make_dir (Path), 
     237    Watcher ! check, 
     238    [{{file, ""}, Path, lost}, {directory, Path, found}] = receive_all (), 
     239    New_file = filename: join (Path, "new.txt"), 
     240    ok = file: write_file (New_file, list_to_binary ("new")), 
     241    Watcher ! check, 
     242    [{{file, ".txt"}, New_file, found}] = receive_all (), 
     243    ok. 
     244 
     245change_from_directory_to_file_when_recursive (Root, _) -> 
     246    Watcher = spawn_link (directory_watcher, init_recursive, [Root, self ()]), 
     247    receive_all (), 
     248    Subdir = filename: join ([Root, "subdir", "subsubdir"]), 
     249    ok = fixtures: delete_tree (Subdir), 
     250    ok = file: write_file (Subdir, list_to_binary ("now a file")), 
     251    Watcher ! check, 
     252    [{{file, ".sub"}, _, lost}, 
     253     {directory, Subdir, lost}, 
     254     {{file, ""}, Subdir, found}] = receive_all (), 
     255    ok. 
Note: See TracChangeset for help on using the changeset viewer.