Packages

This package provide two function for mouting or umouting TmpFs device. It require sudo or administrator privilege to use it.

Current section

Files

Jump to
extmpfs lib mix tasks publish.ex
Raw

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