Skip to content

Commit

Permalink
playing around
Browse files Browse the repository at this point in the history
  • Loading branch information
matthid committed Apr 30, 2017
1 parent d022bec commit 6288e97
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 18 deletions.
6 changes: 4 additions & 2 deletions src/Paket.Core/Dependencies/PackageResolver.fs
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,9 @@ let private explorePackageConfig getPackageDetailsF (pkgConfig:PackageConfig) =
| _ ->
match dependency.VersionRequirement.Range with
| Specific _ when dependency.Parent.IsRootRequirement() -> traceWarnfn " - %O is pinned to %O" dependency.Name version
| _ -> tracefn " - %O %A" dependency.Name version
| _ ->
let compareString = dependency.Name.CompareString
tracefn " - %O %A" dependency.Name version

let newRestrictions =
filterRestrictions dependency.Settings.FrameworkRestrictions pkgConfig.GlobalRestrictions
Expand Down Expand Up @@ -693,7 +695,7 @@ let Resolve (getVersionsF, getPackageDetailsF, groupName:GroupName, globalStrate
currentStep.CurrentResolution.Count
(currentStep.CurrentResolution |> Seq.map (fun x -> sprintf "\n - %O, %O" x.Key x.Value.Version) |> String.Concat)
currentStep.OpenRequirements.Count
(currentStep.OpenRequirements |> Seq.map (fun x -> sprintf "\n - %O, %O" x.Parent x.VersionRequirement) |> String.Concat)
(currentStep.OpenRequirements |> Seq.map (fun x -> sprintf "\n - %O, %O (from %O)" x.Name x.VersionRequirement x.Parent) |> String.Concat)

let currentRequirement =
getCurrentRequirement packageFilter currentStep.OpenRequirements stackpack.ConflictHistory
Expand Down
64 changes: 48 additions & 16 deletions src/Paket.Core/PaketConfigFiles/DependenciesFile.fs
Original file line number Diff line number Diff line change
Expand Up @@ -266,16 +266,22 @@ type DependenciesFile(fileName,groups:Map<GroupName,DependenciesGroup>, textRepr
VersionRequirement = versionReq
ResolverStrategyForDirectDependencies = Some ResolverStrategy.Max
ResolverStrategyForTransitives = Some ResolverStrategy.Max
Parent = PackageRequirementSource.DependenciesFile fileName
Parent = PackageRequirementSource.DependenciesFile "runtimeresolution.dependencies"
Graph = []
Sources = group.Sources
Settings = group.Options.Settings })
|> Seq.toList

if Logging.verbose then
tracefn "Runtime dependencies: "
for d in runtimeDeps do
tracefn " -> %O" d

// We want to tell the resolver:
// "We don't really want Package A, but if you need it take Version X (from our resolution above)"
// We do this we hook-in in a modified getVersionF callback which filters known packages to only contain
// the version from the resolution above
// Additionally we add all the requirements, but with locked versions.
let getVersionFromFirstResolution sources strategy groupName packageName =
let resolvedVersion =
match resolved |> Map.tryFind packageName with
Expand All @@ -287,32 +293,58 @@ type DependenciesFile(fileName,groups:Map<GroupName,DependenciesGroup>, textRepr
match resolvedVersion with Some v -> v = ver | None -> true)

tracefn "Trying to find a valid resolution considering runtime dependencies..."
let runtimeResolutionDeps =
resolved
|> Map.toSeq
|> Seq.map snd
|> Seq.map (fun p ->
{ Name = p.Name
VersionRequirement = VersionRequirement (VersionRange.Exactly p.Version.AsString, PreReleaseStatus.All)
// How to get that?
ResolverStrategyForDirectDependencies = Some ResolverStrategy.Max
ResolverStrategyForTransitives = Some ResolverStrategy.Max
Parent = PackageRequirementSource.DependenciesFile "runtimeresolution.dependencies"
Graph = []
Sources = group.Sources
Settings = group.Options.Settings })
|> fun des -> Seq.append des runtimeDeps
//let makeExact (req:PackageRequirement) =
// match resolved |> Map.tryFind req.Name with
// | Some res ->
// { req with VersionRequirement = VersionRequirement (VersionRange.Exactly res.Version.AsString, req.VersionRequirement.PreReleases) }
// | None -> req
//(step1Deps |> Seq.map makeExact |> Seq.toList) @ runtimeDeps
|> Seq.distinctBy (fun p -> p.Name) |> Set.ofSeq
let runtimeResolution =
PackageResolver.Resolve(
getVersionF,
getVersionFromFirstResolution,
getPackageDetailsF,
groupName,
group.Options.ResolverStrategyForDirectDependencies,
group.Options.ResolverStrategyForTransitives,
group.Options.Settings.FrameworkRestrictions,
(step1Deps |> Seq.toList) @ runtimeDeps |> Seq.distinctBy (fun d -> d.Name) |> Set.ofSeq,
runtimeResolutionDeps,
updateMode)

// Combine with existing resolution and mark runtime packages.
// TODO: Warn if a runtime package contains a runtime.json? -> We don't download them here :/
runtimeResolution
//match runtimeResolution with
//| Resolution.Ok runtimeResolved ->
// let mapped =
// runtimeResolved
// |> Map.map (fun _ v -> { v with IsRuntimeDependency = true })
// Map.merge (fun p1 p2 ->
// if p1.Version = p2.Version then
// p1
// else
// failwithf "same package '%A' in runtime '%A' and regular '%A' resolution with different versions" p1.Name p1.Version p2.Version) resolved mapped
// |> Resolution.Ok
//| _ -> resolution
//runtimeResolution
match runtimeResolution with
| Resolution.Ok runtimeResolved ->
//let mapped =
runtimeResolved
|> Map.map (fun n v ->
match resolved |> Map.tryFind n with
| Some _ -> v
| None -> // pulled because of runtime resolution
{ v with IsRuntimeDependency = true })
//Map.merge (fun p1 p2 ->
// if p1.Version = p2.Version then
// p1
// else
// failwithf "same package '%A' in runtime '%A' and regular '%A' resolution with different versions" p1.Name p1.Version p2.Version) resolved mapped
|> Resolution.Ok
| _ -> resolution
| Resolution.Conflict _ -> resolution

{ ResolvedPackages = runtimeResolution
Expand Down

0 comments on commit 6288e97

Please sign in to comment.