Browse Source

ft: 优化

master
SisMaker 3 years ago
parent
commit
50e45c9bae
4 changed files with 54 additions and 32 deletions
  1. +24
    -13
      eSync.sample.config
  2. BIN
      priv/fileSync
  3. BIN
      priv/fileSync.exe
  4. +30
    -19
      src/eSync.erl

erlSync.sample.config → eSync.sample.config View File

@ -9,6 +9,15 @@
%% 默认值: all %% 默认值: all
{log, all}, {log, all},
%% base dir
%% 默认值: "./"
{baseDir, "./"},
%% monitor file ext 监听文件的后缀名列表
%% 默认值: [".hrl", ".erl", ".beam", ".dtl", ".lfe", ".ex", ".config"]
{monitorExt, [".hrl", ".erl", ".beam", ".dtl", ".lfe", ".ex", ".config"]},
%% 这个参数用于设置特殊目录下的文件检查编译与加载 %% 这个参数用于设置特殊目录下的文件检查编译与加载
%% 格式:{extraDirs, [{strategy(), [srcDirDescr()]}] | undefined} %% 格式:{extraDirs, [{strategy(), [srcDirDescr()]}] | undefined}
%% -type strategy() :: only | del | addExtra | addOnly. %% -type strategy() :: only | del | addExtra | addOnly.
@ -30,20 +39,22 @@
%% 默认值: fix %% 默认值: fix
{descendant, fix}, {descendant, fix},
%% Beam更新回调函数 格式: undefined | {Mondule, Fun} | [{Mondule, Fun}, ...], Fun函数只有一个参数
{onMSyncFun, undefined},
%% Beam更新回调函数 格式: undefined | {Mondule, Fun} | [{Mondule, Fun}, ...], Fun函数只有一个参数
{onMSyncFun, undefined},
%% config更新回调函数 格式: undefined | {Mondule, Fun} | [{Mondule, Fun}, ...], Fun函数只有一个参数
{onCSyncFun, undefined},
%% 是否开启集群同步加载
{swSyncNode, false},
%% config更新回调函数 格式: undefined | {Mondule, Fun} | [{Mondule, Fun}, ...], Fun函数只有一个参数
{onCSyncFun, undefined},
%% 仅仅内存编译还是编译写入到磁盘去
{isJustMem, false},
%% 是否开启集群同步加载
{swSyncNode, false},
%% 如果存在debug_info_key 需要用户提供获取debug_info_key的函数 格式: undefined | {Mondule, Fun}
%% this fun need return: {debug_info_key, xxx}
{debugInfoKeyFun, undefined}
]}
].
%% 仅仅内存编译还是编译写入到磁盘去
{isJustMem, false},
%% 如果存在debug_info_key 需要用户提供获取debug_info_key的函数 格式: undefined | {Mondule, Fun}
%% this fun need return: {debug_info_key, xxx}
{debugInfoKeyFun, undefined}
]}
].

BIN
priv/fileSync View File


BIN
priv/fileSync.exe View File


+ 30
- 19
src/eSync.erl View File

@ -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 ->

Loading…
Cancel
Save