Sfoglia il codice sorgente

fx: 处理一下头文件包含别的头文件的时候 如果修改了被包含的头文件被修改时 不能正确处理需要编译的文件

master
SisMaker 4 anni fa
parent
commit
f3090ca834
2 ha cambiato i file con 34 aggiunte e 17 eliminazioni
  1. +3
    -2
      src/sync/esSyncSrv.erl
  2. +31
    -15
      src/sync/esUtils.erl

+ 3
- 2
src/sync/esSyncSrv.erl Vedi File

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

+ 31
- 15
src/sync/esUtils.erl Vedi File

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

Caricamento…
Annulla
Salva