Skip to content

Commit

Permalink
Force resolver to look into deeper levels - fixes #1520
Browse files Browse the repository at this point in the history
Force resolver to look into deeper levels - fixes #1520
  • Loading branch information
forki committed Mar 16, 2016
1 parent 579a2e7 commit 28d9b82
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 25 deletions.
1 change: 1 addition & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#### 2.52.9 - 16.03.2016
* USABILITY: Improved error message when paket.dependencies can't be found - https://github.com/fsprojects/Paket/pull/1519
* BUGFIX: Force resolver to look into deeper levels - https://github.com/fsprojects/Paket/issues/1520

#### 2.52.8 - 15.03.2016
* USABILITY: Better error message when paket.lock an paket.dependencies are out of sync.
Expand Down
7 changes: 5 additions & 2 deletions integrationtests/Paket.IntegrationTests/UpdatePackageSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,6 @@ let ``#1432 update doesn't throw Stackoverflow``() =
directPaket "pack templatefile paket.D.template version 1.0.0-prerelease output bin" scenario |> ignore
directPaket "update" scenario|> ignore


[<Test>]
let ``#1500 don't detect framework twice``() =
update "i001500-auto-detect" |> ignore
Expand All @@ -123,4 +122,8 @@ let ``#1500 don't detect framework twice``() =

[<Test>]
let ``#1501 download succeeds``() =
update "i001510-download" |> ignore
update "i001510-download" |> ignore

[<Test>]
let ``#1520 update with pinned dependency succeeds``() =
update "i001520-pinned-error" |> ignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
source https://nuget.org/api/v2
nuget Microsoft.ApplicationInsights.WindowsServer = 1.2.3
11 changes: 7 additions & 4 deletions src/Paket.Core/PackageResolver.fs
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ let Resolve(groupName:GroupName, sources, getVersionsF, getPackageDetailsF, glob
let currentRequirement = getCurrentRequirement openRequirements
let conflicts = getConflicts(filteredVersions,closedRequirements,openRequirements,currentRequirement)
if conflicts |> Set.isEmpty |> not then
Resolution.Conflict(currentResolution,closedRequirements,conflicts,Seq.head conflicts,getVersionsF sources ResolverStrategy.Max groupName)
Resolution.Conflict(currentResolution,closedRequirements,openRequirements,Seq.head conflicts,getVersionsF sources ResolverStrategy.Max groupName)
else
let availableVersions,compatibleVersions,globalOverride = getCompatibleVersions(relax,filteredVersions,openRequirements,currentRequirement)

Expand Down Expand Up @@ -473,9 +473,12 @@ let Resolve(groupName:GroupName, sources, getVersionsF, getPackageDetailsF, glob

let newResolution = Map.add exploredPackage.Name exploredPackage currentResolution

state := step (relax,newFilteredVersions,newResolution,Set.add currentRequirement closedRequirements,newOpen)
let newClosed = Set.add currentRequirement closedRequirements

state := step (relax,newFilteredVersions,newResolution,newClosed,newOpen)

match !state with
| Resolution.Conflict (_,_,stillOpen,_,_)
| Resolution.Conflict(resolved,closed,stillOpen,lastPackageRequirement,getVersionF)
when stillOpen |> Set.exists (fun r -> r = currentRequirement || r.Graph |> List.contains currentRequirement) |> not ->
forceBreak := true
| _ -> ()
Expand All @@ -490,7 +493,7 @@ let Resolve(groupName:GroupName, sources, getVersionsF, getPackageDetailsF, glob
!state

match step (false, Map.empty, Map.empty, Set.empty, rootDependencies) with
| Resolution.Conflict(_) as conflict ->
| Resolution.Conflict(resolved,closed,stillOpen,_,_) as conflict ->
if !tryRelaxed then
conflictHistory.Clear()
knownConflicts.Clear() |> ignore
Expand Down
4 changes: 2 additions & 2 deletions src/Paket/Paket.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
</DocumentationFile>
<StartAction>Project</StartAction>
<StartProgram>paket.exe</StartProgram>
<StartArguments>install</StartArguments>
<StartWorkingDirectory>D:\code\Paket\integrationtests\scenarios\i001427-content-once-remove\temp</StartWorkingDirectory>
<StartArguments>update</StartArguments>
<StartWorkingDirectory>D:\code\Paket\integrationtests\scenarios\i001520-pinned-error\temp</StartWorkingDirectory>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
Expand Down
22 changes: 5 additions & 17 deletions tests/Paket.Tests/UpdateProcessSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -397,26 +397,14 @@ let ``SelectiveUpdate does not update when package conflicts with a transitive d

let packageFilter = PackageName "log4net" |> PackageFilter.ofName

let lockFile =
try
selectiveUpdate true noSha1 (VersionsFromGraph graph) (PackageDetailsFromGraph graph) lockFile dependenciesFile
(PackageResolver.UpdateMode.UpdateFiltered(Constants.MainDependencyGroup, packageFilter)) SemVerUpdateMode.NoRestriction
|> ignore
failwithf "expected an exception"
with
| exn when exn.Message.Contains "Could not resolve package log4net" -> ()

let result =
lockFile.GetGroupedResolution()
|> Map.toSeq
|> Seq.map (fun (_,r) -> (string r.Name, string r.Version))

let expected =
[("Castle.Core-log4net","3.2.0");
("Castle.Core","3.2.0");
("FAKE","4.0.0");
("log4net", "1.2.10")]
|> Seq.sortBy fst

result
|> Seq.sortBy fst
|> shouldEqual expected


let graph2 =
[ "Ninject", "2.2.1.4", []
Expand Down

0 comments on commit 28d9b82

Please sign in to comment.