diff --git a/src/sync/esSyncSrv.erl b/src/sync/esSyncSrv.erl index 204901e..8eaf0bb 100644 --- a/src/sync/esSyncSrv.erl +++ b/src/sync/esSyncSrv.erl @@ -36,7 +36,10 @@ -record(state, { srcFiles = #{} :: map() - , onsyncFun = undefined + , hrlFiles = #{} :: map() + , configs = #{} :: map() + , beams = #{} :: map() + , onSyncFun = undefined , swSyncNode = false , port = undefined }). @@ -81,7 +84,7 @@ getOnsync() -> es_gen_ipc:call(?SERVER, miGetOnsync). setOnsync(Fun) -> - es_gen_ipc:call(?SERVER, {miSetOnsync, Fun}). + es_gen_ipc:call(?SERVER, {miSetOnSync, Fun}). %% ************************************ API end *************************** start_link() -> @@ -100,10 +103,10 @@ handleAfter(?None, waiting, State) -> Port = erlang:open_port({spawn_executable, PortName}, Opts), {kpS, State#state{port = Port}, {sTimeout, 4000, waitConnOver}}. -handleCall(miGetOnsync, _, #state{onsyncFun = OnSync} = State, _From) -> - {reply, OnSync, State}; -handleCall({miSetOnsync, Fun}, _, State, _From) -> - {reply, ok, State#state{onsyncFun = Fun}}; +handleCall(miGetOnsync, _, #state{onSyncFun = OnSyncFun} = State, _From) -> + {reply, OnSyncFun, State}; +handleCall({miSetOnSync, Fun}, _, State, _From) -> + {reply, ok, State#state{onSyncFun = Fun}}; handleCall(miCurInfo, _, State, _Form) -> {reply, {erlang:get(), State}, State}; handleCall(_Request, _, _State, _From) -> @@ -126,12 +129,12 @@ handleCast(miRescan, _, State) -> handleCast(_Msg, _, _State) -> kpS_S. -handleInfo({_Port, {data, Data}}, running, #state{srcFiles = SrcFiles, onsyncFun = OnsyncFun, swSyncNode = SwSyncNode} = State) -> +handleInfo({_Port, {data, Data}}, running, #state{srcFiles = SrcFiles, onSyncFun = OnSyncFun, swSyncNode = SwSyncNode} = State) -> FileList = binary:split(Data, <<"\r\n">>, [global]), %% 收集改动了beam hrl src 文件 然后执行相应的逻辑 {Beams, Hrls, Srcs, Configs} = esUtils:classifyChangeFile(FileList, [], [], [], []), - esUtils:fireOnsync(OnsyncFun, Configs), - esUtils:reloadChangedMod(Beams, SwSyncNode, OnsyncFun, []), + esUtils:fireOnsync(OnSyncFun, Configs), + esUtils:reloadChangedMod(Beams, SwSyncNode, OnSyncFun, []), case ?esCfgSync:getv(?compileCmd) of undefined -> esUtils:recompileChangeHrlFile(Hrls, SrcFiles, SwSyncNode), diff --git a/src/sync/esUtils.erl b/src/sync/esUtils.erl index d22b5f1..c25e084 100644 --- a/src/sync/esUtils.erl +++ b/src/sync/esUtils.erl @@ -371,11 +371,21 @@ mergeExtraDirs(IsAddPath) -> collSrcFiles(IsAddPath) -> {AddSrcDirs, OnlySrcDirs, DelSrcDirs} = mergeExtraDirs(IsAddPath), CollFiles = filelib:fold_files(filename:absname(<<"./">>), ".*\\.(erl|dtl|lfe|ex)$", true, - fun(OneFiles, Acc) -> - case isOnlyDir(OnlySrcDirs, OneFiles) of + fun(OneFiles, {Srcs, Hrls, Configs, Beams} = Acc) -> + case isOnlyDir(OnlySrcDirs, OneFiles) andalso (not isDelDir(DelSrcDirs, OneFiles)) of true -> - case isDelDir(DelSrcDirs, OneFiles) of - false -> + MTime = filelib:last_modified(OneFiles), + case filename:extension(OneFiles) of + <<".beam">> -> + Module = binary_to_atom(filename:basename(OneFile, <<".beam">>)), + ; + <<".hrl">> -> + [OneFile | Hrls]; + <<".config">> -> + [OneFile | Configs]; + <<>> -> + Acc; + _ -> RootSrcDir = case getRootSrcDirFromSrcDir(OneFiles) of undefined -> @@ -395,9 +405,7 @@ collSrcFiles(IsAddPath) -> _ -> ignore end, - Acc#{OneFiles => 1}; - _ -> - Acc + Acc#{OneFiles => 1} end; _ -> Acc @@ -865,6 +873,7 @@ doMathEveryLine(IoDevice, HrlFileBaseName) -> classifyChangeFile([], Beams, Hrls, Srcs, Configs) -> {Beams, Hrls, Srcs, Configs}; classifyChangeFile([OneFile | LeftFile], Beams, Hrls, Srcs, Configs) -> + %% IMY-todo filename:absname case filename:extension(OneFile) of <<".beam">> -> Module = binary_to_atom(filename:basename(OneFile, <<".beam">>)), @@ -901,3 +910,12 @@ fileSyncPath(ExecName) -> Dir -> filename:join(Dir, ExecName) end. + +dateTimeToSec(DateTime) -> + if + DateTime == 0 -> + 0; + true -> + + localtime_to_universaltime(DateTime, undefined) + end. \ No newline at end of file