From f3090ca8341ea065d06758c0c172aa8e16de6b00 Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Tue, 9 Mar 2021 20:01:55 +0800 Subject: [PATCH] =?UTF-8?q?fx:=20=E5=A4=84=E7=90=86=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E5=A4=B4=E6=96=87=E4=BB=B6=E5=8C=85=E5=90=AB=E5=88=AB=E7=9A=84?= =?UTF-8?q?=E5=A4=B4=E6=96=87=E4=BB=B6=E7=9A=84=E6=97=B6=E5=80=99=20?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E4=BF=AE=E6=94=B9=E4=BA=86=E8=A2=AB=E5=8C=85?= =?UTF-8?q?=E5=90=AB=E7=9A=84=E5=A4=B4=E6=96=87=E4=BB=B6=E8=A2=AB=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=97=B6=20=E4=B8=8D=E8=83=BD=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=9C=80=E8=A6=81=E7=BC=96=E8=AF=91=E7=9A=84?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sync/esSyncSrv.erl | 5 +++-- src/sync/esUtils.erl | 46 ++++++++++++++++++++++++++++-------------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/sync/esSyncSrv.erl b/src/sync/esSyncSrv.erl index b75f043..f354c95 100644 --- a/src/sync/esSyncSrv.erl +++ b/src/sync/esSyncSrv.erl @@ -134,12 +134,13 @@ handleInfo({Port, {data, Data}}, Status, #state{srcFiles = Srcs, hrlFiles = Hrls running -> FileList = binary:split(Data, <<"\r\n">>, [global]), %% 收集改动了beam hrl src 文件 然后执行相应的逻辑 - {CBeams, CConfigs, CHrls, CSrcs, NewSrcs, NewHrls, NewConfigs, NewBeams} = esUtils:classifyChangeFile(FileList, [], [], [], #{}, Srcs, Hrls, Configs, Beams), + {CBeams, CConfigs, CHrls, CSrcs, NewSrcs, NewHrls, NewConfigs, NewBeams} = esUtils:classifyChangeFile(FileList, [], [], #{}, #{}, Srcs, Hrls, Configs, Beams), esUtils:fireOnsync(OnSyncFun, CConfigs), esUtils:reloadChangedMod(CBeams, SwSyncNode, OnSyncFun, []), case ?esCfgSync:getv(?compileCmd) of undefined -> - NReSrcs = esUtils:recompileChangeHrlFile(CHrls, NewSrcs, CSrcs), + LastCHrls = esUtils:collIncludeCHrls(maps:keys(CHrls), NewHrls, CHrls, #{}), + NReSrcs = esUtils:collIncludeCErls(maps:keys(LastCHrls), NewSrcs, CSrcs, #{}), esUtils:recompileChangeSrcFile(maps:iterator(NReSrcs), SwSyncNode), {kpS, State#state{srcFiles = NewSrcs, hrlFiles = NewHrls, configs = NewConfigs, beams = NewBeams}}; CmdStr -> diff --git a/src/sync/esUtils.erl b/src/sync/esUtils.erl index 797ff9b..19d1899 100644 --- a/src/sync/esUtils.erl +++ b/src/sync/esUtils.erl @@ -831,34 +831,50 @@ recompileSrcFile(SrcFile, SwSyncNode) -> end end. -recompileChangeHrlFile([], _SrcFiles, CSrcs) -> +collIncludeCHrls([], AllHrls, CHrls, NewAddMap) -> + case maps:size(NewAddMap) > 0 of + true -> + collIncludeCHrls(maps:keys(NewAddMap), AllHrls, CHrls, #{}); + _ -> + CHrls + end; +collIncludeCHrls([OneHrl | LeftCHrls], AllHrls, CHrls, NewAddMap) -> + {NewCHrls, NNewAddMap} = whoInclude(OneHrl, AllHrls, CHrls, NewAddMap), + collIncludeCHrls(LeftCHrls, AllHrls, NewCHrls, NNewAddMap). + +collIncludeCErls([], _SrcFiles, CSrcs, _NewAddMap) -> CSrcs; -recompileChangeHrlFile([Hrl | LeftHrl], SrcFiles, CSrcs) -> - NewCSrcs = whoInclude(Hrl, SrcFiles, CSrcs), - recompileChangeHrlFile(LeftHrl, SrcFiles, NewCSrcs). +collIncludeCErls([Hrl | LeftHrl], SrcFiles, CSrcs, NewAddMap) -> + {NewCSrcs, NNewAddMap} = whoInclude(Hrl, SrcFiles, CSrcs, NewAddMap), + collIncludeCErls(LeftHrl, SrcFiles, NewCSrcs, NNewAddMap). -whoInclude(HrlFile, SrcFiles, CSrcs) -> +whoInclude(HrlFile, AllFiles, CFiles, NewAddMap) -> HrlFileBaseName = filename:basename(HrlFile), - doMathEveryFile(maps:iterator(SrcFiles), HrlFileBaseName, CSrcs). + doMathEveryFile(maps:iterator(AllFiles), HrlFileBaseName, CFiles, NewAddMap). -doMathEveryFile(Iterator, HrlFileBaseName, CSrcs) -> +doMathEveryFile(Iterator, HrlFileBaseName, CFiles, NewAddMap) -> case maps:next(Iterator) of - {SrcFile, _V, NextIterator} -> - case file:open(SrcFile, [read, binary]) of + {OneFile, _V, NextIterator} -> + case file:open(OneFile, [read, binary]) of {ok, IoDevice} -> IsInclude = doMathEveryLine(IoDevice, HrlFileBaseName), file:close(IoDevice), case IsInclude of true -> - doMathEveryFile(NextIterator, HrlFileBaseName, CSrcs#{SrcFile => 1}); + case maps:is_key(OneFile, CFiles) of + true -> + doMathEveryFile(NextIterator, HrlFileBaseName, CFiles, NewAddMap); + _ -> + doMathEveryFile(NextIterator, HrlFileBaseName, CFiles#{OneFile => 1}, NewAddMap#{OneFile => 1}) + end; _ -> - doMathEveryFile(NextIterator, HrlFileBaseName, CSrcs) + doMathEveryFile(NextIterator, HrlFileBaseName, CFiles, NewAddMap) end; _ -> - doMathEveryFile(NextIterator, HrlFileBaseName, CSrcs) + doMathEveryFile(NextIterator, HrlFileBaseName, CFiles, NewAddMap) end; _ -> - CSrcs + {CFiles, NewAddMap} end. %% 注释 @@ -936,12 +952,12 @@ classifyChangeFile([OneFile | LeftFile], Beams, Configs, Hrls, Srcs, ColSrcs, Co #{AbsFile := OldMTimeSec} -> case CurMTimeSec =/= OldMTimeSec andalso CurMTimeSec =/= 0 of true -> - classifyChangeFile(LeftFile, Beams, Configs, [AbsFile | Hrls], Srcs, ColSrcs, ColHrls#{AbsFile := CurMTimeSec}, ColConfigs, ColBeams); + classifyChangeFile(LeftFile, Beams, Configs, Hrls#{AbsFile => 1}, Srcs, ColSrcs, ColHrls#{AbsFile := CurMTimeSec}, ColConfigs, ColBeams); _ -> classifyChangeFile(LeftFile, Beams, Configs, Hrls, Srcs, ColSrcs, ColHrls, ColConfigs, ColBeams) end; _ -> - classifyChangeFile(LeftFile, Beams, Configs, [AbsFile | Hrls], Srcs, ColSrcs, ColHrls#{AbsFile => CurMTimeSec}, ColConfigs, ColBeams) + classifyChangeFile(LeftFile, Beams, Configs, Hrls#{AbsFile => 1}, Srcs, ColSrcs, ColHrls#{AbsFile => CurMTimeSec}, ColConfigs, ColBeams) end; <<>> -> classifyChangeFile(LeftFile, Beams, Configs, Hrls, Srcs, ColSrcs, ColHrls, ColConfigs, ColBeams);