mirror of
https://github.com/correl/rebar.git
synced 2024-12-18 03:00:17 +00:00
Ensure edocs are also built if only overview.edoc changes
This commit is contained in:
parent
d90697d40e
commit
ca8d7cc95d
1 changed files with 33 additions and 30 deletions
|
@ -54,18 +54,7 @@ doc(Config, File) ->
|
||||||
{ok, Config1, AppName, _AppData} =
|
{ok, Config1, AppName, _AppData} =
|
||||||
rebar_app_utils:load_app_file(Config, File),
|
rebar_app_utils:load_app_file(Config, File),
|
||||||
|
|
||||||
%% Determine the age of the summary file
|
case needs_regen(EDocOpts) of
|
||||||
EDocInfoName = filename:join(proplists:get_value(dir, EDocOpts, "doc"),
|
|
||||||
"edoc-info"),
|
|
||||||
EDocInfoLastMod = filelib:last_modified(EDocInfoName),
|
|
||||||
|
|
||||||
%% For each source directory, look for a more recent file than
|
|
||||||
%% SumaryLastMod; in that case, we go ahead and do a full regen
|
|
||||||
NeedsRegen = newer_file_exists(proplists:get_value(source_path,
|
|
||||||
EDocOpts, ["src"]),
|
|
||||||
EDocInfoLastMod),
|
|
||||||
|
|
||||||
case NeedsRegen of
|
|
||||||
true ->
|
true ->
|
||||||
?INFO("Regenerating edocs for ~p\n", [AppName]),
|
?INFO("Regenerating edocs for ~p\n", [AppName]),
|
||||||
ok = edoc:application(AppName, ".", EDocOpts);
|
ok = edoc:application(AppName, ".", EDocOpts);
|
||||||
|
@ -90,27 +79,41 @@ setup_code_path() ->
|
||||||
true = code:add_patha(rebar_utils:ebin_dir()),
|
true = code:add_patha(rebar_utils:ebin_dir()),
|
||||||
CodePath.
|
CodePath.
|
||||||
|
|
||||||
newer_file_exists(Paths, LastMod) ->
|
-type path_spec() :: {'file', file:filename()} | file:filename().
|
||||||
CheckFile = fun(Filename, _) ->
|
-spec newer_file_exists(Paths::[path_spec()], OldFile::string()) -> boolean().
|
||||||
FLast = filelib:last_modified(Filename),
|
newer_file_exists(Paths, OldFile) ->
|
||||||
case FLast > LastMod of
|
OldModTime = filelib:last_modified(OldFile),
|
||||||
true ->
|
|
||||||
?DEBUG("~p is more recent than edoc-info: "
|
ThrowIfNewer = fun(Fn, _Acc) ->
|
||||||
"~120p > ~120p\n",
|
FModTime = filelib:last_modified(Fn),
|
||||||
[Filename, FLast, LastMod]),
|
(FModTime > OldModTime) andalso
|
||||||
throw(newer_file_exists);
|
throw({newer_file_exists, {Fn, FModTime}})
|
||||||
false ->
|
end,
|
||||||
false
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
try
|
try
|
||||||
lists:foldl(fun(P, _) ->
|
lists:foldl(fun({file, F}, _) ->
|
||||||
|
ThrowIfNewer(F, false);
|
||||||
|
(P, _) ->
|
||||||
filelib:fold_files(P, ".*.erl", true,
|
filelib:fold_files(P, ".*.erl", true,
|
||||||
CheckFile, false)
|
ThrowIfNewer, false)
|
||||||
end, undefined, Paths),
|
end, undefined, Paths)
|
||||||
false
|
|
||||||
catch
|
catch
|
||||||
throw:newer_file_exists ->
|
throw:{newer_file_exists, {Filename, FMod}} ->
|
||||||
|
?DEBUG("~p is more recent than ~p: "
|
||||||
|
"~120p > ~120p\n",
|
||||||
|
[Filename, OldFile, FMod, OldModTime]),
|
||||||
true
|
true
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
%% Needs regen if any dependent file is changed since the last
|
||||||
|
%% edoc run. Dependent files are the erlang source files,
|
||||||
|
%% and the overview file, if it exists.
|
||||||
|
-spec needs_regen(edoc:proplist()) -> boolean().
|
||||||
|
needs_regen(EDocOpts) ->
|
||||||
|
DocDir = proplists:get_value(dir, EDocOpts, "doc"),
|
||||||
|
EDocInfoName = filename:join(DocDir, "edoc-info"),
|
||||||
|
OverviewFile = proplists:get_value(overview, EDocOpts, "overview.edoc"),
|
||||||
|
EDocOverviewName = filename:join(DocDir, OverviewFile),
|
||||||
|
SrcPaths = proplists:get_value(source_path, EDocOpts, ["src"]),
|
||||||
|
|
||||||
|
newer_file_exists([{file, EDocOverviewName} | SrcPaths], EDocInfoName).
|
||||||
|
|
Loading…
Reference in a new issue