refactor(review): factor out common functionality

This commit is contained in:
Thales Macedo Garitezi 2021-11-29 10:23:54 -03:00
parent 0932920d36
commit 93caddd448
No known key found for this signature in database
GPG Key ID: DD279F8152A9B6DD
1 changed files with 25 additions and 17 deletions

View File

@ -102,16 +102,11 @@ main(Options, Baseline) ->
Diffs = Diffs =
lists:filtermap( lists:filtermap(
fun({App, {Upgrade, Downgrade, OldUpgrade, OldDowngrade}}) -> fun({App, {Upgrade, Downgrade, OldUpgrade, OldDowngrade}}) ->
DiffUp = diff_appup_instructions(Upgrade, OldUpgrade), case parse_appup_diffs(Upgrade, OldUpgrade,
DiffDown = diff_appup_instructions(Downgrade, OldDowngrade), Downgrade, OldDowngrade) of
case {DiffUp, DiffDown} of ok ->
{[], []} ->
%% no diff for external dependency
false; false;
_ -> {diffs, Diffs} ->
Diffs = #{ up => DiffUp
, down => DiffDown
},
{true, {App, Diffs}} {true, {App, Diffs}}
end end
end, end,
@ -237,6 +232,23 @@ diff_appup_instructions(ComputedChanges, PresentChanges) ->
[], [],
ComputedChanges). ComputedChanges).
%% For external dependencies, checks if any missing diffs are present
%% and groups them by `up' and `down' types.
parse_appup_diffs(Upgrade, OldUpgrade, Downgrade, OldDowngrade) ->
DiffUp = diff_appup_instructions(Upgrade, OldUpgrade),
DiffDown = diff_appup_instructions(Downgrade, OldDowngrade),
case {DiffUp, DiffDown} of
{[], []} ->
%% no diff for external dependency; ignore
ok;
_ ->
set_invalid(),
Diffs = #{ up => DiffUp
, down => DiffDown
},
{diffs, Diffs}
end.
%% TODO: handle regexes %% TODO: handle regexes
find_matching_version(Vsn, PresentChanges) -> find_matching_version(Vsn, PresentChanges) ->
proplists:get_value(Vsn, PresentChanges). proplists:get_value(Vsn, PresentChanges).
@ -333,17 +345,13 @@ do_update_appup(App, Upgrade, Downgrade, OldUpgrade, OldDowngrade) ->
{ok, AppupFile} -> {ok, AppupFile} ->
render_appfile(AppupFile, Upgrade, Downgrade); render_appfile(AppupFile, Upgrade, Downgrade);
false -> false ->
DiffUp = diff_appup_instructions(Upgrade, OldUpgrade), case parse_appup_diffs(Upgrade, OldUpgrade,
DiffDown = diff_appup_instructions(Downgrade, OldDowngrade), Downgrade, OldDowngrade) of
case {DiffUp, DiffDown} of ok ->
{[], []} ->
%% no diff for external dependency; ignore %% no diff for external dependency; ignore
ok; ok;
_ -> {diffs, Diffs} ->
set_invalid(), set_invalid(),
Diffs = #{ up => DiffUp
, down => DiffDown
},
log("ERROR: Appup file for the external dependency '~p' is not complete.~n Missing changes: ~100p~n", [App, Diffs]), log("ERROR: Appup file for the external dependency '~p' is not complete.~n Missing changes: ~100p~n", [App, Diffs]),
log("NOTE: Some changes above might be already covered by regexes.~n") log("NOTE: Some changes above might be already covered by regexes.~n")
end end