Packages
version_tasks
0.10.17
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.29
0.10.28
0.10.27
0.10.26
0.10.25
0.10.24
0.10.23
0.10.22
0.10.21
0.10.20
0.10.19
0.10.18
0.10.17
0.10.16
0.10.15
0.10.14
0.10.13
0.10.12
0.10.11
0.10.10
0.10.9
0.10.8
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.3
0.3.1
0.2.6
A suite of mix tasks for managing your libs version numbers with git and hex
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/current.ex
defmodule Mix.Tasks.Version.Current do
use Mix.Task
use VersionTasks.FnExpr
@shortdoc "The current version of your project (e.g v0.9.1)"
def run(args) do
args
|> calc
|> IO.puts
end
@shortdoc "Calculate the current version"
def calc(_ \\ nil) do
"mix.exs"
|> File.read
|> invoke(fn ({:ok, content}) -> content end)
|> String.split("\n")
|> Enum.map(&find_version/1)
|> Enum.reject(&is_nil/1)
|> first
end
defp find_version(line) do
find_version(:variable, line) || find_version(:inline, line)
end
defp find_version(:variable, line) do
case Regex.run(~r{@version \"(.*)\"}, line) do
nil -> nil
[_, version] -> version
end
end
defp find_version(:inline, line) do
case Regex.run(~r{version: \"(.*)\"}, line) do
nil -> nil
[_, version] -> version
end
end
defp first(list) do
case Enum.fetch(list, 0) do
{:ok, val} -> val
:error -> nil
end
end
end