From 34371b0cfdd4072921a7d06866da9934b3d46ae2 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Fri, 10 Apr 2015 13:59:45 +0300 Subject: [PATCH 1/2] Target framework: Added >= and made warnings more clear --- src/Paket.Core/NugetConvert.fs | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/Paket.Core/NugetConvert.fs b/src/Paket.Core/NugetConvert.fs index 0c7e67a08f..95d1f3f032 100644 --- a/src/Paket.Core/NugetConvert.fs +++ b/src/Paket.Core/NugetConvert.fs @@ -184,7 +184,8 @@ module NugetEnv = Packages = [for node in doc.SelectNodes("//package") -> { Id = node.Attributes.["id"].Value Version = node.Attributes.["version"].Value |> SemVer.Parse - TargetFramework = node |> getAttribute "targetFramework" } ]} + TargetFramework = + node |> getAttribute "targetFramework" |> Option.map (fun t -> ">= " + t) } ]} |> ok with _ -> fail (NugetPackagesConfigParseError file) @@ -228,21 +229,35 @@ let createPackageRequirement (packageName, version, restrictions) sources depend let createDependenciesFileR (rootDirectory : DirectoryInfo) nugetEnv mode = let dependenciesFileName = Path.Combine(rootDirectory.FullName, Constants.DependenciesFileName) - - let allVersions = + + let allVersionsById = nugetEnv.NugetProjectFiles |> Seq.collect (fun (_,c) -> c.Packages) |> Seq.groupBy (fun p -> p.Id) + + let allVersionsByName = + allVersionsById + |> Seq.map (fun (name, packages) -> name, packages |> Seq.map (fun p -> p.Version) |> Seq.distinct) + |> Seq.sortBy (fun (name,_) -> name.ToLower()) + + for (name, versions) in allVersionsByName do + if Seq.length versions > 1 + then traceWarnfn "Package %s is referenced multiple times in different versions: %A. Paket will choose the latest one." + name + (versions |> Seq.map string |> Seq.toList) + let allVersions = + allVersionsById |> Seq.map (fun (name, packages) -> name, packages |> Seq.map (fun p -> p.Version, p.TargetFramework) |> Seq.distinct) |> Seq.sortBy (fun (name,_) -> name.ToLower()) for (name, versions) in allVersions do - if Seq.length versions > 1 + let targets = versions |> Seq.choose(fun (p,target) -> target) + if Seq.length targets > 1 then traceWarnfn - "Package %s is referenced multiple times with different versions or target frameworks : %A. Paket will choose the latest version and disregard target framework." - name - (versions |> Seq.map string |> Seq.toList) + "Package %s is referenced multiple times with different target frameworks : %A. Paket may disregard target framework." + name + (targets |> Seq.map string |> Seq.toList) let latestVersions = allVersions From dd1f0504777333fb147f1c69429c1e2880b97bf0 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Fri, 10 Apr 2015 19:50:14 +0300 Subject: [PATCH 2/2] better warning handling --- src/Paket.Core/NugetConvert.fs | 41 ++++++++++++++-------------------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/src/Paket.Core/NugetConvert.fs b/src/Paket.Core/NugetConvert.fs index 95d1f3f032..ca114a7559 100644 --- a/src/Paket.Core/NugetConvert.fs +++ b/src/Paket.Core/NugetConvert.fs @@ -230,37 +230,30 @@ let createDependenciesFileR (rootDirectory : DirectoryInfo) nugetEnv mode = let dependenciesFileName = Path.Combine(rootDirectory.FullName, Constants.DependenciesFileName) - let allVersionsById = - + let allVersionsGroupped = nugetEnv.NugetProjectFiles |> Seq.collect (fun (_,c) -> c.Packages) |> Seq.groupBy (fun p -> p.Id) - let allVersionsByName = - allVersionsById - |> Seq.map (fun (name, packages) -> name, packages |> Seq.map (fun p -> p.Version) |> Seq.distinct) - |> Seq.sortBy (fun (name,_) -> name.ToLower()) - - for (name, versions) in allVersionsByName do - if Seq.length versions > 1 - then traceWarnfn "Package %s is referenced multiple times in different versions: %A. Paket will choose the latest one." - name - (versions |> Seq.map string |> Seq.toList) - let allVersions = - allVersionsById - |> Seq.map (fun (name, packages) -> name, packages |> Seq.map (fun p -> p.Version, p.TargetFramework) |> Seq.distinct) + let findDistinctsPackages selector = + allVersionsGroupped + |> Seq.map (fun (name, packages) -> name, packages |> selector) |> Seq.sortBy (fun (name,_) -> name.ToLower()) - - for (name, versions) in allVersions do - let targets = versions |> Seq.choose(fun (p,target) -> target) - if Seq.length targets > 1 - then traceWarnfn - "Package %s is referenced multiple times with different target frameworks : %A. Paket may disregard target framework." - name - (targets |> Seq.map string |> Seq.toList) + + let findWarnings searchBy message = + for (name, versions) in + findDistinctsPackages searchBy + do + if Seq.length versions > 1 + then traceWarnfn message name (versions |> Seq.toList) + + findWarnings (Seq.map (fun p -> p.Version) >> Seq.distinct >> Seq.map string) + "Package %s is referenced multiple times in different versions: %A. Paket will choose the latest one." + findWarnings (Seq.map (fun p -> p.TargetFramework) >> Seq.distinct >> Seq.choose(fun target -> target) >> Seq.map string) + "Package %s is referenced multiple times with different target frameworks : %A. Paket may disregard target framework." let latestVersions = - allVersions + findDistinctsPackages (Seq.map (fun p -> p.Version, p.TargetFramework) >> Seq.distinct) |> Seq.map (fun (name, versions) -> let latestVersion, _ = versions |> Seq.maxBy fst let restrictions =