Current section
Files
Jump to
Current section
Files
lib/mix/tasks/publish.ex
defmodule Mix.Tasks.OpenMercure.Publish do
use Mix.Task
defp diff(rawrep) do
tab = rawrep
|> String.trim
|> String.split
|> Enum.reject(fn x ->
case Float.parse(x) do
:error -> true
_other -> false
end
end)
|> Enum.map(&String.to_integer/1)
case tab do
[files, inserts, sups] -> round((inserts - sups) / files) + 5
[files, inserts] -> round(inserts / files) + 5
_ -> :rand.uniform(255)
end
end
defp new_correctfif(arg) do
{rawrep, 0} = System.cmd("git", ["diff", "--shortstat"])
String.to_integer(arg) + diff(rawrep)
end
@spec update_version :: :ok | {:error, String.t}
defp update_version do
case Mix.Shell.IO.prompt("Okay, the version updtable option is 'maj', 'min' or 'bug', what is your case ? ") |> String.trim do
"maj" -> update_version("maj")
"min" -> update_version("min")
"bug" -> update_version("bug")
_ -> update_version()
end
end
@spec update_version(arg :: String.t) :: :ok | {:error, String.t}
defp update_version(arg) do
case File.read("VERSION") do
{:ok, version} ->
[majeur, mineur, correctif] = version
|> String.trim
|> String.split(".")
new_version = case arg do
"maj" -> [(majeur |> String.to_integer |> Kernel.+(1) |> Integer.to_string), 0, 0]
"min" ->
value = (mineur |> String.to_integer |> Kernel.+(1) |> Integer.to_string)
case value >= 255 do
true -> [(majeur |> String.to_integer |> Kernel.+(1) |> Integer.to_string), 0, 0]
false -> [majeur, value, 0]
end
"bug" ->
case new_correctfif(correctif) >= 255 do
true -> [majeur, (mineur |> String.to_integer |> Kernel.+(1) |> Integer.to_string), 0]
false -> [majeur, mineur, new_correctfif(correctif)]
end
_other -> Mix.raise("argument must be 'min', 'maj', or 'bug'")
end
File.write("VERSION", Enum.join(new_version, "."))
{:error, _reason} -> Mix.raise("File VERSION not exists !!")
end
end
defp update_message do
message = Mix.Shell.IO.prompt("What is your commit message: ") |> String.trim
Mix.Shell.IO.info("The message for commit in git is '#{message}'.")
case Mix.Shell.IO.yes?("Are you okay with that ? ") do
true -> File.write(".message", message)
false -> update_message()
end
end
defp new_readme do
{:ok, raw} = File.read("README.md")
{:ok, version} = File.read("VERSION")
project_name = Mix.Project.config[:app]
|> Atom.to_string
n_raw = String.replace(raw, ~r/(\[\{\:#{project_name}\, \"\~\> .*\"\}\])/, "[{:#{project_name}, \"~> #{version |> String.trim}\"}]")
File.write("README.md", n_raw)
end
defp exec do
Mix.Task.get!(Clean).run([])
Mix.Task.get!(Compile).run([])
new_readme()
{_osef, 0} = System.cmd("git", ["add", "--all"])
{_osef, 0} = System.cmd("git", ["commit", "-m", "#{{:ok, m} = File.read(".message"); m}"])
{_osef, 0} = System.cmd("git", ["push"])
end
def run([arg, message]) do
update_version(arg)
{:ok, version} = File.read("VERSION")
:ok = File.write(".message", message)
Mix.Shell.IO.info("The new version of project is #{version}")
case Mix.Shell.IO.yes?("Are you okay with that ?") do
false ->
update_version()
run([arg, message])
true ->
Mix.Shell.IO.info("The message for commit in git is '#{message}'.")
case Mix.Shell.IO.yes?("Are you okay with that ?") do
false ->
update_message()
exec()
true ->
exec()
end
end
end
end