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] -> a = round((inserts - sups) / files) round(rem(a*a, 255)) [] -> :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" -> [majeur, (mineur |> String.to_integer |> Kernel.+(1) |> Integer.to_string), 0] "bug" -> [majeur, mineur, new_correctfif(correctif)] _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 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() run([arg, File.read(".message")]) true -> Mix.Task.get!(Clean).run([]) Mix.Task.get!(Compile).run([]) {_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"]) Mix.Task.get!(Hex.Publish).run([]) end end end end