Skip to content

Commit

Permalink
Filter pre-releases before merging backtracked versions
Browse files Browse the repository at this point in the history
  • Loading branch information
ericmj committed Jan 8, 2019
1 parent 20c7bb2 commit 379205a
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
9 changes: 8 additions & 1 deletion lib/hex/resolver/backtracks.ex
Original file line number Diff line number Diff line change
Expand Up @@ -333,10 +333,17 @@ defmodule Hex.Resolver.Backtracks do
end

defp merge_versions?(registry, repo, package, versions) do
all_versions = registry.versions(repo, package)
# Filter pre-releases because they were likely not considered during resolution
# This can give false-positive merged version ranges, but it's likely fine
all_versions = filter_pre_releases(registry.versions(repo, package))
versions = filter_pre_releases(versions)
sub_range?(all_versions, versions)
end

defp filter_pre_releases(versions) do
Enum.filter(versions, &String.contains?(&1, "-"))
end

# Assumes lists are sorted
defp sub_range?(outer, inner), do: do_sub_range?(outer, inner, false)

Expand Down
2 changes: 1 addition & 1 deletion test/hex/resolver/backtracks_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ defmodule Hex.Resolver.BacktracksTest do
expected =
format([
:underline,
~s'Failed to use "foo" (versions 0.0.1, 0.1.0, 0.2.1) ',
~s'Failed to use "foo" (versions 0.0.1 to 0.2.1) ',
"because there are no packages that matches the requirement",
:reset,
"\n"
Expand Down

0 comments on commit 379205a

Please sign in to comment.