Packages

A library for git commands.

Current section

Files

Jump to
mpgit src mpgit_gerrit.erl
Raw

src/mpgit_gerrit.erl

-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)).