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

ft: 添加add extra 与 only方便管理父子目录

master
SisMaker 3 лет назад
Родитель
Сommit
ae4b85e0b3
5 измененных файлов: 64 добавлений и 18 удалений
  1. +4
    -3
      eSync.sample.config
  2. Двоичные данные
      priv/fileSync
  3. Двоичные данные
      priv/fileSync.exe
  4. +4
    -3
      src/sync/esSyncSrv.erl
  5. +56
    -12
      src/sync/esUtils.erl

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

@ -11,13 +11,14 @@
%% 这个参数用于设置特殊目录下的文件检查编译与加载
%% 格式:{extraDirs, [{strategy(), [srcDirDescr()]}] | undefined}
%% -type strategy() :: add | only | del.
%% 如果 strategy() when add, 会无条件监听添加的指定目录及其子目录同步编译与加载.
%% -type strategy() :: only | del | addExtra | addOnly.
%% 如果 strategy() when addExtra, 会无条件监听添加的指定目录及其子目录同步编译与加载.
%% 如果 strategy() when addOnly, 会无条件监听添加的指定目录(不含子目录)同步编译与加载.
%% 如果 strategy() when only, 仅仅监听指定目录及其子目录下的文件编译与加载.
%% 如果 strategy() when del, 则不会监听该目录及其子目录下的文件.
%% -type srcDirDescr() :: { Dir :: file:filename(), [Options :: compile_option()]}.
%% 默认值:undefined 根据当前工作目录 和 已经加载的模块做来得出需要扫描的目录
%%示例: {extraDirs, [{add, [{"./_build/default/lib/erlGbh", []}]}, {only, [{"./", []}]}, {del, [{"./_build", []}]}]}.
%%示例: {extraDirs, [{addExtra, [{"./_build/default/lib/erlGbh", []}]}, {only, [{"./", []}]}, {del, [{"./_build", []}]}]}.
%%{extraDirs, [{add, [{"./_build/default/lib/erlGbh", []}, {"./_build/default/lib/eSync/ebin", []}]}, {only, [{"./", []}]}, {del, [{"./_build", []}]}]}
{extraDirs, [{strategy(), [srcDirDescr()]}]},

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


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


+ 4
- 3
src/sync/esSyncSrv.erl Просмотреть файл

@ -197,11 +197,12 @@ handleInfo({Port, {data, Data}}, Status, #state{srcFiles = Srcs, hrlFiles = Hrls
case Data of
<<"init">> ->
%% port启动成功
{AddSrcDirs, OnlySrcDirs, DelSrcDirs} = esUtils:mergeExtraDirs(false),
AddStr = string:join([filename:nativename(OneDir) || OneDir <- AddSrcDirs], "|"),
{AddExtraSrcDirs, AddOnlySrcDirs, OnlySrcDirs, DelSrcDirs} = esUtils: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([AddStr, OnlyStr, DelStr], "\r\n"),
AllStr = string:join([AddExtraStr, AddOnlyStr, OnlyStr, DelStr], "\r\n"),
erlang:port_command(Port, AllStr),
esUtils:logSuccess("eSync connect fileSync success..."),
%% src文件

+ 56
- 12
src/sync/esUtils.erl Просмотреть файл

@ -328,12 +328,12 @@ getSrcDir(Dir, Ctr) ->
mergeExtraDirs(IsAddPath) ->
case ?esCfgSync:getv(?extraDirs) of
undefined ->
{[], [], []};
{[], [], [], []};
ExtraList ->
FunMerge =
fun(OneExtra, {AddDirs, OnlyDirs, DelDirs} = AllAcc) ->
fun(OneExtra, {AddExtraDirs, AddOnlyDirs, OnlyDirs, DelDirs} = AllAcc) ->
case OneExtra of
{add, DirsAndOpts} ->
{addExtra, DirsAndOpts} ->
Adds =
[
begin
@ -352,7 +352,27 @@ mergeExtraDirs(IsAddPath) ->
filename:absname(Dir)
end || {Dir, Opts} <- DirsAndOpts
],
setelement(1, AllAcc, Adds ++ AddDirs);
setelement(1, AllAcc, Adds ++ AddExtraDirs);
{addOnly, DirsAndOpts} ->
Adds =
[
begin
case IsAddPath of
true ->
case proplists:get_value(outdir, Opts) of
undefined ->
true;
Path ->
ok = filelib:ensure_dir(Path),
true = code:add_pathz(Path)
end;
_ ->
ignore
end,
filename:absname(Dir)
end || {Dir, Opts} <- DirsAndOpts
],
setelement(2, AllAcc, Adds ++ AddOnlyDirs);
{only, DirsAndOpts} ->
Onlys =
[
@ -372,7 +392,7 @@ mergeExtraDirs(IsAddPath) ->
filename:absname(Dir)
end || {Dir, Opts} <- DirsAndOpts
],
setelement(2, AllAcc, Onlys ++ OnlyDirs);
setelement(3, AllAcc, Onlys ++ OnlyDirs);
{del, DirsAndOpts} ->
Dels =
[
@ -380,16 +400,17 @@ mergeExtraDirs(IsAddPath) ->
filename:absname(Dir)
end || {Dir, _Opts} <- DirsAndOpts
],
setelement(3, AllAcc, Dels ++ DelDirs)
setelement(4, AllAcc, Dels ++ DelDirs)
end
end,
lists:foldl(FunMerge, {[], [], []}, ExtraList)
lists:foldl(FunMerge, {[], [], [], []}, ExtraList)
end.
-define(IIF(Cond, Ret1, Ret2), (case Cond of true -> Ret1; _ -> Ret2 end)).
-define(RegExp, <<".*\\.(erl|hrl|beam|config|dtl|lfe|ex)$">>).
collSrcFiles(IsAddPath) ->
{AddSrcDirs, OnlySrcDirs, DelSrcDirs} = mergeExtraDirs(IsAddPath),
CollFiles = filelib:fold_files(filename:absname(<<"./">>), ".*\\.(erl|hrl|beam|config|dtl|lfe|ex)$", true,
{AddExtraSrcDirs, AddOnlySrcDirs, OnlySrcDirs, DelSrcDirs} = mergeExtraDirs(IsAddPath),
CollFiles = filelib:fold_files(filename:absname(<<"./">>), ?RegExp, true,
fun(OneFile, {Srcs, Hrls, Configs, Beams} = Acc) ->
case isOnlyDir(OnlySrcDirs, OneFile) andalso (not isDelDir(DelSrcDirs, OneFile)) of
true ->
@ -431,9 +452,31 @@ collSrcFiles(IsAddPath) ->
end
end, {#{}, #{}, #{}, #{}}),
FunCollAdds =
FunCollAddExtra =
fun(OneDir, FilesAcc) ->
filelib:fold_files(?IIF(is_list(OneDir), list_to_binary(OneDir), OneDir), ?RegExp, true,
fun(OneFile, {Srcs, Hrls, Configs, Beams} = Acc) ->
MTimeSec = esUtils:dateTimeToSec(filelib:last_modified(OneFile)),
case filename:extension(OneFile) of
<<".beam">> ->
BeamMod = binary_to_atom(filename:basename(OneFile, <<".beam">>)),
setelement(4, Acc, Beams#{BeamMod => MTimeSec});
<<".config">> ->
setelement(3, Acc, Configs#{OneFile => MTimeSec});
<<".hrl">> ->
setelement(2, Acc, Hrls#{OneFile => MTimeSec});
<<>> ->
Acc;
_ ->
setelement(1, Acc, Srcs#{OneFile => MTimeSec})
end
end, FilesAcc)
end,
AddExtraCollFiles = lists:foldl(FunCollAddExtra, CollFiles, AddExtraSrcDirs),
FunCollAddOnly =
fun(OneDir, FilesAcc) ->
filelib:fold_files(?IIF(is_list(OneDir), list_to_binary(OneDir), OneDir), ".*\\.(erl|hrl|beam|config|dtl|lfe|ex)$", true,
filelib:fold_files(?IIF(is_list(OneDir), list_to_binary(OneDir), OneDir), ?RegExp, false,
fun(OneFile, {Srcs, Hrls, Configs, Beams} = Acc) ->
MTimeSec = esUtils:dateTimeToSec(filelib:last_modified(OneFile)),
case filename:extension(OneFile) of
@ -451,7 +494,8 @@ collSrcFiles(IsAddPath) ->
end
end, FilesAcc)
end,
lists:foldl(FunCollAdds, CollFiles, AddSrcDirs).
lists:foldl(FunCollAddOnly, AddExtraCollFiles, AddOnlySrcDirs).
isOnlyDir([], _) ->
true;

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