Skip to content

Commit c566e59

Browse files
committed
Fix parsing of requirements without spaces
1 parent 5a69a46 commit c566e59

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/hex/version.ex

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@ defmodule Hex.Version do
105105

106106
defp custom_requirement(requirement) do
107107
try do
108-
req = String.split(requirement, " ", trim: true) |> custom_parse
108+
req = String.split(requirement, " ", trim: true)
109+
|> split_ops
110+
|> custom_parse
109111
{:ok, %Requirement{source: requirement, req: req}}
110112
catch
111113
:error ->
@@ -130,6 +132,17 @@ defmodule Hex.Version do
130132
defp custom_parse(_),
131133
do: throw :error
132134

135+
def split_ops([op|rest]) when op in @version_ops,
136+
do: [op|split_ops(rest)]
137+
def split_ops([<<op::binary-2, version::binary>>|rest]) when op in @version_ops,
138+
do: [op, version|split_ops(rest)]
139+
def split_ops([<<op::binary-1, version::binary>>|rest]) when op in @version_ops,
140+
do: [op, version|split_ops(rest)]
141+
def split_ops([version|rest]),
142+
do: [version|split_ops(rest)]
143+
def split_ops([]),
144+
do: []
145+
133146
defp allow_pre? do
134147
Code.ensure_loaded?(Version) and function_exported?(Version, :match?, 3)
135148
end

test/hex/version_test.exs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,14 @@ defmodule Hex.VersionTest do
1212
refute V.match?("1.1.0-beta", ">= 1.0.0")
1313
assert V.match?("1.1.0-beta", ">= 1.0.0-beta")
1414
end
15+
16+
test "parse requirement" do
17+
assert {:ok, _} = V.parse_requirement("1.0.0")
18+
assert {:ok, _} = V.parse_requirement("== 1.0.0")
19+
assert {:ok, _} = V.parse_requirement("==1.0.0")
20+
assert {:ok, _} = V.parse_requirement("== 1.0.0 and == 1.0.0")
21+
assert {:ok, _} = V.parse_requirement("==1.0.0 and ==1.0.0")
22+
23+
assert :error = V.parse_requirement("foo")
24+
end
1525
end

0 commit comments

Comments
 (0)