- Timestamp:
- 07/06/09 11:50:16 (3 years ago)
- Location:
- trunk/src
- Files:
-
- 2 edited
-
directory_watcher.erl (modified) (3 diffs)
-
directory_watcher_test.erl (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/directory_watcher.erl
r54 r56 6 6 -export ([init/2]). 7 7 -export ([init_recursive/2]). 8 -export([start_io/2]). 9 -export([start_io/0]). 8 10 -include_lib ("kernel/include/file.hrl"). 11 12 start_io () -> 13 start_io (".", 3000). 14 15 start_io (Dir, Interval) -> 16 Watcher = spawn_link (?MODULE, init_recursive, [Dir, self ()]), 17 io_loop (Interval, Watcher). 18 19 io_loop (Interval, Watcher) -> 20 Watcher ! check, 21 receive 22 {directory_watcher, _, Event} -> 23 io: fwrite ("~p~n", [Event]), 24 io_loop (Interval, Watcher); 25 stop -> 26 bye 27 after Interval -> 28 io_loop (Interval, Watcher) 29 end. 9 30 10 31 init (Directory, Pid) -> … … 16 37 17 38 check (Directory, Pid, State) -> 18 New_state = list_dir (Directory, Pid , State),39 New_state = list_dir (Directory, Pid), 19 40 compare (Pid, State, New_state), 20 41 loop (Directory, Pid, New_state). 21 42 22 list_dir (Directory, Pid , State) ->23 list_dir (Directory, Pid, State,file: list_dir (Directory)).43 list_dir (Directory, Pid) -> 44 list_dir (Directory, Pid, file: list_dir (Directory)). 24 45 25 list_dir (Directory, _, _,{ok, Filenames}) ->46 list_dir (Directory, _, {ok, Filenames}) -> 26 47 Paths = [filename: join (Directory, F) || F <- Filenames], 27 48 read_state (Paths); 28 list_dir (Directory, Pid, State,Error) ->49 list_dir (Directory, Pid, Error) -> 29 50 notify (Pid, {directory, Directory, Error}), 30 State.51 []. 31 52 32 53 read_state (Filenames) -> … … 61 82 notify (Pid, Event), 62 83 loop_recursive (Directory, Pid, [Watcher | Watchers]); 84 {?MODULE, Watcher, {directory, _, {error, enoent}}} -> 85 Watcher ! stop, 86 loop_recursive (Directory, Pid, Watchers -- [Watcher]); 87 {?MODULE, _, bye} -> 88 loop_recursive (Directory, Pid, Watchers); 63 89 {?MODULE, _, Event} -> 64 90 notify (Pid, Event), -
trunk/src/directory_watcher_test.erl
r55 r56 10 10 -export ([bad_symlinks_are_ignored/0]). 11 11 -export ([recursive/0]). 12 -export([directories_can_be_removed/0]). 13 -export([directories_can_be_removed_when_recursive/0]). 12 14 13 15 tests_from_empty () -> … … 37 39 38 40 recursive () -> 41 ok = fixtures: use_tree (tree (), fun recursive/2). 42 43 directories_can_be_removed () -> 44 ok = fixtures: use_tree (tree (), fun directories_can_be_removed/2). 45 46 directories_can_be_removed_when_recursive () -> 47 ok = fixtures: use_tree (tree (), fun directories_can_be_removed_when_recursive/2). 48 49 tree () -> 39 50 Subsub = {directory, "subsubdir", 40 51 [{file, "subsubfile.sub", "titi"}]}, … … 45 56 [{file, "subfile.ext", "toto"}, 46 57 Subsub]}], 47 ok = fixtures: use_tree (Tree, fun recursive/2). 58 Tree. 59 60 directories_can_be_removed (Dir, _) -> 61 Watcher = spawn_link (directory_watcher, init, [Dir, self ()]), 62 receive_all (), 63 Subdir = filename: join (Dir, "subdir"), 64 fixtures: delete_tree (Subdir), 65 Watcher ! check, 66 {unknown, Subdir, lost} = receive_one (), 67 ok. 68 69 directories_can_be_removed_when_recursive (Dir, _) -> 70 Watcher = spawn_link (directory_watcher, init_recursive, [Dir, self ()]), 71 receive_all (), 72 Subdir = filename: join ([Dir, "subdir", "subsubdir"]), 73 fixtures: delete_tree (Subdir), 74 Watcher ! check, 75 File = filename: join (Subdir, "subsubfile.sub"), 76 [{unknown, File, lost}, {unknown, Subdir, lost}] = receive_all (), 77 ok. 48 78 49 79 recursive (Dir, _) -> … … 147 177 after 500 -> timeout 148 178 end. 179 180 receive_all () -> 181 lists: reverse (receive_all ([])). 182 183 receive_all (Acc) -> 184 receive {directory_watcher, _, Event} -> 185 receive_all ([Event | Acc]) 186 after 500 -> 187 Acc 188 end.
Note: See TracChangeset
for help on using the changeset viewer.
