123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- -module(fs).
- -include_lib("kernel/include/file.hrl").
- -export([subscribe/0, known_events/0, start_looper/0, path/0, find_executable/2]).
- % sample subscriber
- subscribe() -> gen_event:add_sup_handler(fs_events, {fs_event_bridge, self()}, [self()]).
- known_events() -> gen_server:call(fs_server, known_events).
- start_looper() -> spawn(fun() -> subscribe(), loop() end).
- path() ->
- case application:get_env(fs, path) of
- {ok, P} -> filename:absname(P);
- undefined -> filename:absname("") end.
- loop() ->
- receive
- {_Pid, {fs, file_event}, {Path, Flags}} -> error_logger:info_msg("file_event: ~p ~p", [Path, Flags]);
- _ -> ignore end,
- loop().
- find_executable(Cmd, DepsPath) ->
- case priv_file(Cmd) of
- false -> mad_file(DepsPath);
- Priv -> Priv end.
- mad_file(DepsPath) ->
- case filelib:is_regular(DepsPath) of
- true -> DepsPath;
- false ->
- case mad_repl:load_file(DepsPath) of
- {error,_} ->
- %% This path has been already checked in find_executable/2
- false;
- {ok,ETSFile} ->
- filelib:ensure_dir(DepsPath),
- file:write_file(DepsPath, ETSFile),
- file:write_file_info(DepsPath, #file_info{mode=8#00555}) end end.
- priv_file(Cmd) ->
- case code:priv_dir(fs) of
- Priv when is_list(Priv) ->
- Path = filename:join(Priv, Cmd),
- case filelib:is_regular(Path) of
- true -> Path;
- false -> false end;
- _ ->
- false end.
|