From 528d3fd31f6dbdbdf20eada8ccc1076e401b9442 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Wed, 3 Sep 2014 11:58:38 +0200 Subject: [PATCH] Refactoring towards #27 --- src/Paket/Nuget.fs | 37 +++++++++++++++++-------------------- src/Paket/Paket.fsproj | 1 - 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/Paket/Nuget.fs b/src/Paket/Nuget.fs index d7a7f113d5..12a93b3b0f 100644 --- a/src/Paket/Nuget.fs +++ b/src/Paket/Nuget.fs @@ -6,19 +6,22 @@ open System.IO open System.Net open Newtonsoft.Json open Ionic.Zip -open System.Xml.Linq open System.Xml +let loadNuGetOData raw = + let doc = XmlDocument() + doc.LoadXml raw + let manager = new XmlNamespaceManager(doc.NameTable) + manager.AddNamespace("ns", "http://www.w3.org/2005/Atom") + manager.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices") + manager.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata") + doc,manager + let getVersionsFromNuget (nugetURL, package) = async { // TODO: this is a very very naive implementation let! raw = sprintf "%s/Packages?$filter=Id eq '%s'" nugetURL package |> getFromUrl - let doc = XmlDocument() - doc.LoadXml raw - let manager = new XmlNamespaceManager(doc.NameTable) - manager.AddNamespace("ns", "http://www.w3.org/2005/Atom") - manager.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices") - manager.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata") + let doc,manager = loadNuGetOData raw return seq { for node in doc.SelectNodes("//ns:feed/ns:entry/m:properties/d:Version", manager) do yield node.InnerText @@ -53,20 +56,14 @@ let getDetailsFromNuget nugetURL package version = async { // TODO: this is a very very naive implementation let! raw = sprintf "%s/Packages(Id='%s',Version='%s')" nugetURL package version |> getFromUrl - let data = XDocument.Parse raw + let doc,manager = loadNuGetOData raw - let getAttribute = - let rootNs = XName.Get("entry", "http://www.w3.org/2005/Atom") - let propertiesNs = - XName.Get("properties", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata") - let attributesNs attribute = - XName.Get(attribute, "http://schemas.microsoft.com/ado/2007/08/dataservices") - - let properties = - rootNs - |> data.Element - |> fun entry -> entry.Element(propertiesNs) - fun attribute -> properties.Element(attributesNs attribute).Value + let getAttribute name = + seq { + for node in doc.SelectNodes(sprintf "//ns:entry/m:properties/d:%s" name, manager) do + yield node.InnerText + } + |> Seq.head let packages = getAttribute "Dependencies" diff --git a/src/Paket/Paket.fsproj b/src/Paket/Paket.fsproj index 42e7f33809..46370946a8 100644 --- a/src/Paket/Paket.fsproj +++ b/src/Paket/Paket.fsproj @@ -102,7 +102,6 @@ - ..\..\packages\UnionArgParser\lib\net40\UnionArgParser.dll True