Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions src/Paket.Core/Dependencies/PackageResolver.fs
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ let calcOpenRequirements (exploredPackage:ResolvedPackage,globalFrameworkRestric
VersionRequirement = v
Parent = Package(dependency.Name, versionToExplore, exploredPackage.Source)
Graph = Set.add dependency dependency.Graph
TransitivePrereleases = dependency.TransitivePrereleases && v.PreReleases <> PreReleaseStatus.No
TransitivePrereleases = dependency.TransitivePrereleases && exploredPackage.Version.PreRelease.IsSome
Settings = { dependency.Settings with FrameworkRestrictions = newRestrictions } })
|> Set.filter (fun d ->
resolverStep.ClosedRequirements
Expand Down Expand Up @@ -526,10 +526,21 @@ let private getCompatibleVersions
compatibleVersions, true
elif Seq.isEmpty compatibleVersions then
let prereleaseStatus (r:PackageRequirement) =
if r.Parent.IsRootRequirement() && r.VersionRequirement <> VersionRequirement.AllReleases then
match r.Parent with
| DependenciesFile _ when r.VersionRequirement <> VersionRequirement.AllReleases ->
r.VersionRequirement.PreReleases
else
PreReleaseStatus.All
| Package (_,v,_) ->
match v.PreRelease with
| Some _ -> PreReleaseStatus.All
| _ ->
let allowTransitivePreleases =
(currentStep.ClosedRequirements |> Set.exists (fun r2 -> r2.TransitivePrereleases && r2.Name = r.Name)) ||
(currentStep.OpenRequirements |> Set.exists (fun r2 -> r2.TransitivePrereleases && r2.Name = r.Name))
if allowTransitivePreleases then
PreReleaseStatus.All
else
r.VersionRequirement.PreReleases
| _ -> PreReleaseStatus.All

let available = availableVersions |> Seq.toList
let prereleases = List.filter (isInRange (fun r -> r.IncludingPrereleases(prereleaseStatus r))) available
Expand Down
6 changes: 3 additions & 3 deletions tests/Paket.Tests/Resolver/PrereleaseSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ let ``should fail resolution when only prerelease is available in transitives``(
"packageA","1.1-alpha",["packageB", VersionRequirement(VersionRange.AtLeast("1.1-alpha"),PreReleaseStatus.All)]
"packageB","1.0",[]
"packageB","1.1",["packageC", VersionRequirement(VersionRange.Between("1.1", "2.0"),PreReleaseStatus.No)]
"packageC","1.0",[]
"packageC","1.1-alpha",[]
]

Expand All @@ -233,9 +234,8 @@ nuget PackageA prerelease
"""
let cfg = DependenciesFile.FromSource(config)
try
ResolveWithGraph(cfg,noSha1, VersionsFromGraphAsSeq graph, PackageDetailsFromGraph graph).[Constants.MainDependencyGroup].ResolvedPackages.GetModelOrFail()
|> ignore
Assert.Fail ("Expected resolution to fail")
let resolved = ResolveWithGraph(cfg,noSha1, VersionsFromGraphAsSeq graph, PackageDetailsFromGraph graph).[Constants.MainDependencyGroup].ResolvedPackages.GetModelOrFail()
Assert.Fail (sprintf "Expected resolution to fail but got %A" resolved)
with
| :? NUnit.Framework.AssertionException -> reraise()
| :? System.AggregateException as agg -> ()
Expand Down