Просмотр исходного кода

ft: 修改启动port时传入参数 优化传入工作目录 优化传入监听文件

master
SisMaker 3 лет назад
Родитель
Сommit
65e5057e20
4 измененных файлов: 39 добавлений и 21 удалений
  1. +9
    -0
      eSync.sample.config
  2. Двоичные данные
      priv/fileSync
  3. Двоичные данные
      priv/fileSync.exe
  4. +30
    -21
      src/eSync.erl

+ 9
- 0
eSync.sample.config Просмотреть файл

@ -9,6 +9,15 @@
%% 默认值: 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}
%% -type strategy() :: only | del | addExtra | addOnly.

Двоичные данные
priv/fileSync Просмотреть файл


Двоичные данные
priv/fileSync.exe Просмотреть файл


+ 30
- 21
src/eSync.erl Просмотреть файл

@ -11,6 +11,8 @@
-define(LOG_ON(Val), Val == true; Val == all; Val == skip_success; is_list(Val), Val =/= []).
-define(Log, log).
-define(baseDir, baseDir).
-define(monitorExt, monitorExt).
-define(compileCmd, compileCmd).
-define(extraDirs, extraDirs).
-define(descendant, descendant).
@ -20,7 +22,9 @@
-define(isJustMem, isJustMem).
-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(rootSrcDir, <<"src">>).
@ -160,8 +164,18 @@ init(_Args) ->
handleAfter(?None, waiting, State) ->
%% 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"),
Opts = [{packet, 4}, binary, exit_status, use_stdio],
Port = erlang:open_port({spawn_executable, PortName}, Opts),
{kpS, State#state{port = Port}, {sTimeout, 4000, waitConnOver}}.
@ -195,7 +209,7 @@ handleCast(miRescan, _, State) ->
handleCast(_Msg, _, _State) ->
kpS_S.
handleInfo({Port, {data, Data}}, Status, #state{srcFiles = Srcs, hrlFiles = Hrls, configs = Configs, beams = Beams, onMSyncFun = OnMSyncFun, onCSyncFun = OnCSyncFun, swSyncNode = SwSyncNode} = State) ->
handleInfo({_Port, {data, Data}}, Status, #state{srcFiles = Srcs, hrlFiles = Hrls, configs = Configs, beams = Beams, onMSyncFun = OnMSyncFun, onCSyncFun = OnCSyncFun, swSyncNode = SwSyncNode} = State) ->
case Status of
running ->
FileList = binary:split(Data, <<"\r\n">>, [global]),
@ -230,18 +244,9 @@ handleInfo({Port, {data, Data}}, Status, #state{srcFiles = Srcs, hrlFiles = Hrls
_ ->
case Data of
<<"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文件
{BSrcs, BHrls, BConfigs, BBeams} = collSrcFiles(true),
?logSuccess("eSync coll src files over..."),
?logSuccess("eSync connect fileSync success and coll src files over..."),
{nextS, running, State#state{srcFiles = BSrcs, hrlFiles = BHrls, configs = BConfigs, beams = BBeams}, {isHib, true}};
_ ->
?logErrors("error, receive unexpect port msg ~p~n", [Data]),
@ -353,7 +358,7 @@ tryGetModOpts(Module) ->
Options7 = lists:keyreplace(debug_info_key, 1, Options6, debugInfoKeyFun()),
{ok, Options7}
catch _ExType:_Error ->
undefiend
undefined
end.
tryGetSrcOpts(SrcDir) ->
@ -564,11 +569,7 @@ getSrcDir(Dir) ->
getSrcDir(_Dir, 0) ->
undefined;
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
HasCode -> {ok, Dir};
true -> getSrcDir(filename:dirname(Dir), Ctr - 1)
@ -655,10 +656,18 @@ mergeExtraDirs(IsAddPath) ->
lists:foldl(FunMerge, {[], [], [], []}, ExtraList)
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) ->
{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) ->
case isOnlyDir(OnlySrcDirs, OneFile) andalso (not isDelDir(DelSrcDirs, OneFile)) of
true ->

Загрузка…
Отмена
Сохранить