Skip to content
This repository has been archived by the owner on Apr 7, 2018. It is now read-only.

Commit

Permalink
Add handling for versions generated with git-describe. Fixes #207
Browse files Browse the repository at this point in the history
  • Loading branch information
bitwalker committed Oct 9, 2015
1 parent 8786878 commit cfbf687
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
17 changes: 14 additions & 3 deletions lib/exrm/utils.ex
Original file line number Diff line number Diff line change
Expand Up @@ -154,18 +154,29 @@ defmodule ReleaseManager.Utils do
compare, but can fall back to regular string compare.
"""
def sort_versions(versions) do
versions |> Enum.sort(
fn v1, v2 ->
versions
|> Enum.map(fn ver ->
# Special handling for git-describe versions
compared = case Regex.named_captures(~r/(?<ver>\d+\.\d+\.\d+)-(?<commits>\d+)-(?<sha>[A-Ga-g0-9]+)/, ver) do
nil -> ver
%{"ver" => version, "commits" => n, "sha" => sha} -> <<version::binary, ?+, n::binary, ?-, sha::binary>>
end
{ver, compared}
end)
|> Enum.sort(
fn {_, v1}, {_, v2} ->
case { parse_version(v1), parse_version(v2) } do
{{:semantic, v1}, {:semantic, v2}} ->
case Version.compare(v1, v2) do
:gt -> true
_ -> false
:eq -> v1 > v2
:lt -> false
end;
{{_, v1}, {_, v2}} ->
v1 > v2
end
end)
|> Enum.map(fn {v, _} -> v end)
end

defp parse_version(ver) do
Expand Down
6 changes: 6 additions & 0 deletions test/utils_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,10 @@ defmodule UtilsTest do
assert ["1.3", "1.2", "1.1"] = Utils.sort_versions(["1.1", "1.3", "1.2"])
end

test "can compare complex versions" do
expected = ["0.0.2", "0.0.1-2-a1d2g3f", "0.0.1-1-deadbeef", "0.0.1"]
result = Utils.sort_versions(["0.0.2", "0.0.1-1-deadbeef", "0.0.1-2-a1d2g3f", "0.0.1"])
assert expected == result
end

end

0 comments on commit cfbf687

Please sign in to comment.