From a107b2ba64ce090904a829cc4d4b35c5d2560547 Mon Sep 17 00:00:00 2001 From: meh Date: Mon, 2 Sep 2013 21:15:16 +0200 Subject: [PATCH] Fix handling pre/build data when minor/patch is missing in Mix.Version --- lib/mix/lib/mix/version.ex | 7 +++++-- lib/mix/test/mix/version_test.exs | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/mix/lib/mix/version.ex b/lib/mix/lib/mix/version.ex index 3a0e251bba..48eb53d5d0 100644 --- a/lib/mix/lib/mix/version.ex +++ b/lib/mix/lib/mix/version.ex @@ -277,14 +277,17 @@ defmodule Mix.Version do end end + defp nillify(""), do: nil + defp nillify(o), do: o + @spec parse_version(String.t) :: { :ok, Mix.Version.matchable } | { :error, :invalid_version } def parse_version(string) when is_binary(string) do if valid_version?(string) do destructure [_, major, minor, patch, pre], Regex.run(@version_regex, string) major = binary_to_integer(major) - minor = binary_to_integer(minor || "0") - patch = binary_to_integer(patch || "0") + minor = binary_to_integer(minor |> nillify || "0") + patch = binary_to_integer(patch |> nillify || "0") pre = pre && parse_pre(pre) || [] { :ok, { major, minor, patch, pre } } diff --git a/lib/mix/test/mix/version_test.exs b/lib/mix/test/mix/version_test.exs index f251b37bb5..7adefcdb1c 100644 --- a/lib/mix/test/mix/version_test.exs +++ b/lib/mix/test/mix/version_test.exs @@ -23,6 +23,13 @@ defmodule Mix.VersionTest do refute P.valid_requirement?(P.lexer("& 1.0.0", [])) end + test :parse do + assert V.Schema[major: 1, minor: 0, patch: 0] = V.parse("1") + assert V.Schema[major: 1, minor: 2, patch: 0] = V.parse("1.2") + assert V.Schema[major: 1, minor: 2, patch: 3] = V.parse("1.2.3") + assert V.Schema[major: 1, minor: 4, patch: 0, pre: "5-g3318bd5"] = V.parse("1.4-5-g3318bd5") + end + test :== do assert V.match?("2.3", "2.3") refute V.match?("2.4", "2.3")