diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index eb1dc7219a..1fb1292840 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,6 @@ +#### 0.2.0-alpha012 - 17.09.2014 +* Package names in Dependencies file are no longer case-sensitive - https://github.com/fsprojects/Paket/pull/108 + #### 0.2.0-alpha011 - 17.09.2014 * Always pin the Github version of a referenced file in the lockfile - https://github.com/fsprojects/Paket/pull/110 diff --git a/paket.lock b/paket.lock index ab6b7dcbad..75e253c203 100644 --- a/paket.lock +++ b/paket.lock @@ -9,9 +9,9 @@ NUGET RazorEngine (3.3.0) FSharp.Compiler.Service (0.0.59) Microsoft.AspNet.Razor (2.0.30506.0) + Newtonsoft.Json (6.0.5) NUnit (2.6.3) NUnit.Runners (2.6.3) - Newtonsoft.Json (6.0.5) RazorEngine (3.3.0) Microsoft.AspNet.Razor (>= 2.0.30506.0) SourceLink.Fake (0.3.4) diff --git a/src/Paket/BasicTypes.fs b/src/Paket/BasicTypes.fs index 638a771878..a929b19c4f 100644 --- a/src/Paket/BasicTypes.fs +++ b/src/Paket/BasicTypes.fs @@ -131,10 +131,11 @@ type Dependency = | FromPackage d -> d.Referenced /// Represents package details -type PackageDetails = { - Source: PackageSource - DownloadLink: string - DirectDependencies : UnresolvedPackage list } +type PackageDetails = + { Name : string + Source : PackageSource + DownloadLink : string + DirectDependencies : UnresolvedPackage list } /// Interface for discovery APIs. type IDiscovery = diff --git a/src/Paket/Nuget.fs b/src/Paket/Nuget.fs index a1f5ee8a05..28aeb5fbca 100644 --- a/src/Paket/Nuget.fs +++ b/src/Paket/Nuget.fs @@ -8,6 +8,7 @@ open Newtonsoft.Json open Ionic.Zip open System.Xml open System.Collections.Generic +open System.Text.RegularExpressions let private loadNuGetOData raw = let doc = XmlDocument() @@ -68,9 +69,9 @@ let getAllVersions (nugetURL, package) = /// Gets versions of the given package from local Nuget feed. let getAllVersionsFromLocalPath (localNugetPath, package) = async { - return Directory.EnumerateFiles(localNugetPath) - |> Seq.choose (fun f -> - let _match = Text.RegularExpressions.Regex(sprintf @"%s\.(\d.*)\.nupkg" package).Match(f) + return Directory.EnumerateFiles(localNugetPath,"*.nupkg",SearchOption.AllDirectories) + |> Seq.choose (fun fileName -> + let _match = Regex(sprintf @"%s\.(\d.*)\.nupkg" package, RegexOptions.IgnoreCase).Match(fileName) if _match.Groups.Count > 1 then Some _match.Groups.[1].Value else None) } @@ -125,6 +126,14 @@ let getDetailsFromNugetViaOData nugetURL package sources resolverStrategy versio } |> Seq.head + let officialName = + seq { + for node in doc.SelectNodes("//ns:entry/ns:title", manager) do + yield node.InnerText + } + |> Seq.head + + let downloadLink = seq { for node in doc.SelectNodes("//ns:entry/ns:content", manager) do @@ -151,7 +160,7 @@ let getDetailsFromNugetViaOData nugetURL package sources resolverStrategy versio ResolverStrategy = resolverStrategy }) |> Array.toList - return downloadLink,packages + return officialName,downloadLink,packages } /// The NuGet cache folder. @@ -164,7 +173,7 @@ let private loadFromCacheOrOData force fileName nugetURL package sources resolve if not force && File.Exists fileName then try let json = File.ReadAllText(fileName) - return false,JsonConvert.DeserializeObject(json) + return false,JsonConvert.DeserializeObject(json) with _ -> let! details = getDetailsFromNugetViaOData nugetURL package sources resolverStrategy version return true,details @@ -225,9 +234,15 @@ let getDetailsFromLocalFile path package sources resolverStrategy version = ResolverStrategy = resolverStrategy }) |> Seq.toList + let officialName = + xmlDoc.SelectNodes(sprintf "/%s:package/%s:metadata/%s:id" pfx pfx pfx, ns) + |> Seq.cast + |> Seq.head + |> fun node -> node.InnerText + File.Delete(nuspec.FullName) - return package,dependencies + return officialName,package,dependencies } /// Downloads the given package to the NuGet Cache folder @@ -240,7 +255,7 @@ let DownloadPackage(url, name, sources, version, force) = return targetFileName else // discover the link on the fly - let! (link, _) = getDetailsFromNuget force url name sources ResolverStrategy.Max version + let! (_,link, _) = getDetailsFromNuget force url name sources ResolverStrategy.Max version use client = new WebClient() tracefn "Downloading %s %s to %s" name version targetFileName // TODO: Set credentials @@ -321,9 +336,10 @@ let NugetDiscovery = return! tryNext [] } - let! source,(link,packages) = tryNext sources + let! source,(name,link,packages) = tryNext sources return - { Source = source + { Name = name + Source = source DownloadLink = link DirectDependencies = packages |> List.map (fun package -> {package with Sources = source :: (List.filter ((<>) source) sources) })} diff --git a/src/Paket/PackageResolver.fs b/src/Paket/PackageResolver.fs index 6fab01c9f7..57aae46138 100644 --- a/src/Paket/PackageResolver.fs +++ b/src/Paket/PackageResolver.fs @@ -35,11 +35,12 @@ let private shrink (s1 : Shrinked, s2 : Shrinked) = | _ -> Shrinked.Conflict(version1, version2) | _ -> s1 -let private addDependency package dependencies newDependency = +let private addDependency (packageName:string) dependencies newDependency = + let name = packageName.ToLower() let newDependency = Shrinked.Ok newDependency - match Map.tryFind package dependencies with - | Some oldDependency -> Map.add package (shrink(oldDependency,newDependency)) dependencies - | None -> Map.add package newDependency dependencies + match Map.tryFind name dependencies with + | Some oldDependency -> Map.add name (shrink(oldDependency,newDependency)) dependencies + | None -> Map.add name newDependency dependencies /// Resolves all direct and indirect dependencies let Resolve(force, discovery : IDiscovery, rootDependencies:UnresolvedPackage seq) = @@ -102,7 +103,7 @@ let Resolve(force, discovery : IDiscovery, rootDependencies:UnresolvedPackage se |> Async.RunSynchronously let resolvedPackage:ResolvedPackage = - { Name = resolvedName + { Name = packageDetails.Name Version = resolvedVersion DirectDependencies = packageDetails.DirectDependencies diff --git a/tests/Paket.Tests/TestHelpers.fs b/tests/Paket.Tests/TestHelpers.fs index 21c6e92d17..0a08356ef3 100644 --- a/tests/Paket.Tests/TestHelpers.fs +++ b/tests/Paket.Tests/TestHelpers.fs @@ -18,7 +18,7 @@ let DictionaryDiscovery(graph : seq