|
@ -10,6 +10,8 @@ |
|
|
-define(LOG_ON(Val), Val == true; Val == all; Val == skip_success; is_list(Val), Val =/= []). |
|
|
-define(LOG_ON(Val), Val == true; Val == all; Val == skip_success; is_list(Val), Val =/= []). |
|
|
|
|
|
|
|
|
-define(Log, log). |
|
|
-define(Log, log). |
|
|
|
|
|
-define(baseDir, baseDir). |
|
|
|
|
|
-define(monitorExt, monitorExt). |
|
|
-define(compileCmd, compileCmd). |
|
|
-define(compileCmd, compileCmd). |
|
|
-define(extraDirs, extraDirs). |
|
|
-define(extraDirs, extraDirs). |
|
|
-define(descendant, descendant). |
|
|
-define(descendant, descendant). |
|
@ -19,7 +21,9 @@ |
|
|
-define(isJustMem, isJustMem). |
|
|
-define(isJustMem, isJustMem). |
|
|
-define(debugInfoKeyFun, debugInfoKeyFun). |
|
|
-define(debugInfoKeyFun, debugInfoKeyFun). |
|
|
|
|
|
|
|
|
-define(DefCfgList, [{?Log, all}, {?compileCmd, undefined}, {?extraDirs, undefined}, {?descendant, fix}, {?onMSyncFun, undefined}, {?onCSyncFun, undefined}, {?swSyncNode, false}, {?isJustMem, false}, {?debugInfoKeyFun, undefined}]). |
|
|
|
|
|
|
|
|
-define(ExtList, [".hrl", ".erl", ".beam", ".dtl", ".lfe", ".ex", ".config"]). |
|
|
|
|
|
|
|
|
|
|
|
-define(DefCfgList, [{?Log, all}, {?baseDir, "./"}, {?monitorExt, ?ExtList}, {?compileCmd, undefined}, {?extraDirs, undefined}, {?descendant, fix}, {?onMSyncFun, undefined}, {?onCSyncFun, undefined}, {?swSyncNode, false}, {?isJustMem, false}, {?debugInfoKeyFun, undefined}]). |
|
|
|
|
|
|
|
|
-define(esCfgSync, esCfgSync). |
|
|
-define(esCfgSync, esCfgSync). |
|
|
-define(rootSrcDir, <<"src">>). |
|
|
-define(rootSrcDir, <<"src">>). |
|
@ -225,17 +229,9 @@ handle_info({Port, {data, Data}}, #state{status = Status, srcFiles = Srcs, hrlFi |
|
|
wait -> |
|
|
wait -> |
|
|
case Data of |
|
|
case Data of |
|
|
<<"init">> -> |
|
|
<<"init">> -> |
|
|
%% port启动成功 先发送监听目录配置 |
|
|
|
|
|
{AddExtraSrcDirs, AddOnlySrcDirs, OnlySrcDirs, DelSrcDirs} = mergeExtraDirs(false), |
|
|
|
|
|
AddExtraStr = string:join([filename:nativename(OneDir) || OneDir <- AddExtraSrcDirs], "|"), |
|
|
|
|
|
AddOnlyStr = string:join([filename:nativename(OneDir) || OneDir <- AddOnlySrcDirs], "|"), |
|
|
|
|
|
OnlyStr = string:join([filename:nativename(OneDir) || OneDir <- OnlySrcDirs], "|"), |
|
|
|
|
|
DelStr = string:join([filename:nativename(OneDir) || OneDir <- DelSrcDirs], "|"), |
|
|
|
|
|
AllStr = string:join([AddExtraStr, AddOnlyStr, OnlyStr, DelStr], "\r\n"), |
|
|
|
|
|
erlang:port_command(Port, AllStr), |
|
|
|
|
|
?logSuccess("eSync connect fileSync success..."), |
|
|
|
|
|
%% 然后收集一下监听目录下的src文件 |
|
|
%% 然后收集一下监听目录下的src文件 |
|
|
{BSrcs, BHrls, BConfigs, BBeams} = collSrcFiles(true), |
|
|
{BSrcs, BHrls, BConfigs, BBeams} = collSrcFiles(true), |
|
|
|
|
|
?logSuccess("eSync connect fileSync success and coll src files over..."), |
|
|
{noreply, State#state{status = running, srcFiles = BSrcs, hrlFiles = BHrls, configs = BConfigs, beams = BBeams}, hibernate}; |
|
|
{noreply, State#state{status = running, srcFiles = BSrcs, hrlFiles = BHrls, configs = BConfigs, beams = BBeams}, hibernate}; |
|
|
_ -> |
|
|
_ -> |
|
|
?logErrors("error, eSync receive unexpect port msg ~p~n", [Data]), |
|
|
?logErrors("error, eSync receive unexpect port msg ~p~n", [Data]), |
|
@ -255,8 +251,19 @@ handle_info({'EXIT', _Pid, _Reason}, _State) -> |
|
|
{noreply, _State}; |
|
|
{noreply, _State}; |
|
|
handle_info(doAfter, State) -> |
|
|
handle_info(doAfter, State) -> |
|
|
%% 启动port 发送监听目录信息 |
|
|
%% 启动port 发送监听目录信息 |
|
|
|
|
|
{AddExtraSrcDirs, AddOnlySrcDirs, OnlySrcDirs, DelSrcDirs} = mergeExtraDirs(false), |
|
|
|
|
|
AddExtraStr = string:join([filename:nativename(OneDir) || OneDir <- AddExtraSrcDirs], "|"), |
|
|
|
|
|
AddOnlyStr = string:join([filename:nativename(OneDir) || OneDir <- AddOnlySrcDirs], "|"), |
|
|
|
|
|
OnlyStr = string:join([filename:nativename(OneDir) || OneDir <- OnlySrcDirs], "|"), |
|
|
|
|
|
DelStr = string:join([filename:nativename(OneDir) || OneDir <- DelSrcDirs], "|"), |
|
|
|
|
|
AllStr = string:join([AddExtraStr, AddOnlyStr, OnlyStr, DelStr], "\r\n"), |
|
|
|
|
|
|
|
|
|
|
|
BaseDirStr = filename:nativename(?esCfgSync:getv(?baseDir)), |
|
|
|
|
|
MonitorExtStr = string:join(?esCfgSync:getv(?monitorExt), "|"), |
|
|
|
|
|
|
|
|
|
|
|
Opts = [{packet, 4}, binary, exit_status, use_stdio, {args, [BaseDirStr, MonitorExtStr, AllStr]}], |
|
|
|
|
|
|
|
|
PortName = fileSyncPath("fileSync"), |
|
|
PortName = fileSyncPath("fileSync"), |
|
|
Opts = [{packet, 4}, binary, exit_status, use_stdio], |
|
|
|
|
|
Port = erlang:open_port({spawn_executable, PortName}, Opts), |
|
|
Port = erlang:open_port({spawn_executable, PortName}, Opts), |
|
|
{noreply, State#state{port = Port}, 4000}; |
|
|
{noreply, State#state{port = Port}, 4000}; |
|
|
handle_info(timeout, State) -> |
|
|
handle_info(timeout, State) -> |
|
@ -352,7 +359,7 @@ tryGetModOpts(Module) -> |
|
|
Options7 = lists:keyreplace(debug_info_key, 1, Options6, debugInfoKeyFun()), |
|
|
Options7 = lists:keyreplace(debug_info_key, 1, Options6, debugInfoKeyFun()), |
|
|
{ok, Options7} |
|
|
{ok, Options7} |
|
|
catch _ExType:_Error -> |
|
|
catch _ExType:_Error -> |
|
|
undefiend |
|
|
|
|
|
|
|
|
undefined |
|
|
end. |
|
|
end. |
|
|
|
|
|
|
|
|
tryGetSrcOpts(SrcDir) -> |
|
|
tryGetSrcOpts(SrcDir) -> |
|
@ -563,11 +570,7 @@ getSrcDir(Dir) -> |
|
|
getSrcDir(_Dir, 0) -> |
|
|
getSrcDir(_Dir, 0) -> |
|
|
undefined; |
|
|
undefined; |
|
|
getSrcDir(Dir, Ctr) -> |
|
|
getSrcDir(Dir, Ctr) -> |
|
|
HasCode = filelib:wildcard("*.erl", Dir) /= [] orelse |
|
|
|
|
|
filelib:wildcard("*.hrl", Dir) /= [] orelse |
|
|
|
|
|
filelib:wildcard("*.dtl", Dir) /= [] orelse |
|
|
|
|
|
filelib:wildcard("*.lfe", Dir) /= [] orelse |
|
|
|
|
|
filelib:wildcard("*.ex", Dir) /= [], |
|
|
|
|
|
|
|
|
HasCode = filelib:wildcard("*.{erl,hrl,ex,dtl,lfe}", Dir) /= [], |
|
|
if |
|
|
if |
|
|
HasCode -> {ok, Dir}; |
|
|
HasCode -> {ok, Dir}; |
|
|
true -> getSrcDir(filename:dirname(Dir), Ctr - 1) |
|
|
true -> getSrcDir(filename:dirname(Dir), Ctr - 1) |
|
@ -654,10 +657,18 @@ mergeExtraDirs(IsAddPath) -> |
|
|
lists:foldl(FunMerge, {[], [], [], []}, ExtraList) |
|
|
lists:foldl(FunMerge, {[], [], [], []}, ExtraList) |
|
|
end. |
|
|
end. |
|
|
|
|
|
|
|
|
-define(RegExp, <<".*\\.(erl|hrl|beam|config|dtl|lfe|ex)$">>). |
|
|
|
|
|
|
|
|
toBinary(Value) when is_list(Value) -> list_to_binary(Value); |
|
|
|
|
|
toBinary(Value) when is_binary(Value) -> Value. |
|
|
|
|
|
|
|
|
|
|
|
regExp() -> |
|
|
|
|
|
% <<".*\\.(erl|hrl|beam|config|dtl|lfe|ex)$">> |
|
|
|
|
|
<<_Del:8, RegExpStr/binary>> = << <<"|", (toBinary(Tail))/binary>> || [_Dot | Tail] <- ?esCfgSync:getv(?monitorExt)>>, |
|
|
|
|
|
<<".*\\.(", RegExpStr/binary, ")$">>. |
|
|
|
|
|
|
|
|
|
|
|
-define(RegExp, regExp()). |
|
|
collSrcFiles(IsAddPath) -> |
|
|
collSrcFiles(IsAddPath) -> |
|
|
{AddExtraSrcDirs, AddOnlySrcDirs, OnlySrcDirs, DelSrcDirs} = mergeExtraDirs(IsAddPath), |
|
|
{AddExtraSrcDirs, AddOnlySrcDirs, OnlySrcDirs, DelSrcDirs} = mergeExtraDirs(IsAddPath), |
|
|
CollFiles = filelib:fold_files(filename:absname(<<"./">>), ?RegExp, true, |
|
|
|
|
|
|
|
|
CollFiles = filelib:fold_files(filename:absname(toBinary(?esCfgSync:getv(?baseDir))), ?RegExp, true, |
|
|
fun(OneFile, {Srcs, Hrls, Configs, Beams} = Acc) -> |
|
|
fun(OneFile, {Srcs, Hrls, Configs, Beams} = Acc) -> |
|
|
case isOnlyDir(OnlySrcDirs, OneFile) andalso (not isDelDir(DelSrcDirs, OneFile)) of |
|
|
case isOnlyDir(OnlySrcDirs, OneFile) andalso (not isDelDir(DelSrcDirs, OneFile)) of |
|
|
true -> |
|
|
true -> |
|
|