-module(mpgit_gerrit). %% API exports -export([review/3]). %%============================================================================== %% API functions %%============================================================================== review(Config, Actions, CommitID) when is_map(Config), is_list(Actions), is_list(CommitID) -> {Host, Port, Project} = get_config(Config), ActionList = build_action_list(Actions), Prepend = ["-p", Port, Host, "gerrit review", "--project", Project], Append = [CommitID], WordList = Prepend ++ ActionList ++ Append, CmdStr = lists:flatten(lists:join(" ", ["ssh"|WordList])), os_cmd(CmdStr). %%============================================================================== %% Internal functions %%============================================================================== get_config(Config) -> Host = maps:get(host, Config), Port = maps:get(port, Config, "29418"), Project = maps:get(project, Config), {Host, Port, Project}. build_action_list(Actions) -> build_action_list(Actions, []). build_action_list([{verified, NStr}|T], Acc) -> build_action_list(T, ["--verified", NStr | Acc]); build_action_list([{codereview, NStr}|T], Acc) -> build_action_list(T, ["--code-review", NStr | Acc]); build_action_list([submit|T], Acc) -> build_action_list(T, ["--submit" | Acc]); build_action_list([{message, Str}|T], Acc) -> build_action_list(T, ["--message", Str | Acc]); build_action_list([], Acc) -> Acc. os_cmd(Str) -> string:trim(os:cmd(Str)).