diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 5ecc8bee13..9f251c195f 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,5 +1,4 @@ -#### 2.26.0 - 18.11.2015 -* Try all 4 NuGet APIs for "GetPackageDetails" in parallel - https://github.com/fsprojects/Paket/issues/1225 +#### 2.26.1 - 18.11.2015 * BUGFIX: Better parsing of framework restrictions - https://github.com/fsprojects/Paket/issues/1232 * BUGFIX: Fix props files - https://github.com/fsprojects/Paket/issues/1233 * BUGFIX: Detect AssemblyName from project file name if empty - https://github.com/fsprojects/Paket/issues/1234 diff --git a/src/Paket.Core/NuGetV2.fs b/src/Paket.Core/NuGetV2.fs index 15691c39a9..326e05312c 100644 --- a/src/Paket.Core/NuGetV2.fs +++ b/src/Paket.Core/NuGetV2.fs @@ -182,75 +182,49 @@ let parseODataDetails(nugetURL,packageName:PackageName,version,raw) = LicenseUrl = licenseUrl Unlisted = publishDate = Constants.MagicUnlistingDate } -/// Gets package details from NuGet via OData -let getDetailsFromNuGetViaOData auth nugetURL (packageName:PackageName) (version:SemVerInfo) = - let checkODataWithNormalizedVersion = async { - try + +let getDetailsFromNuGetViaODataFast auth nugetURL (packageName:PackageName) (version:SemVerInfo) = + async { + try let url = sprintf "%s/Packages?$filter=(Id eq '%O') and (NormalizedVersion eq '%s')" nugetURL packageName (version.Normalize()) let! raw = getFromUrl(auth,url,acceptXml) if verbose then tracefn "Response from %s:" url tracefn "" tracefn "%s" raw - return Some(parseODataDetails(nugetURL,packageName,version,raw)) - with - | _ -> return None } - - let checkODataWithVersion = async { - try + return parseODataDetails(nugetURL,packageName,version,raw) + with _ -> let url = sprintf "%s/Packages?$filter=(Id eq '%O') and (Version eq '%O')" nugetURL packageName version let! raw = getFromUrl(auth,url,acceptXml) if verbose then tracefn "Response from %s:" url tracefn "" tracefn "%s" raw - return Some(parseODataDetails(nugetURL,packageName,version,raw)) - with - | _ -> return None } + return parseODataDetails(nugetURL,packageName,version,raw) + } - let checkPackagesWithVersion = async { - try +/// Gets package details from NuGet via OData +let getDetailsFromNuGetViaOData auth nugetURL (packageName:PackageName) (version:SemVerInfo) = + async { + try + return! getDetailsFromNuGetViaODataFast auth nugetURL packageName version + with _ -> let url = sprintf "%s/Packages(Id='%O',Version='%O')" nugetURL packageName version let! response = safeGetFromUrl(auth,url,acceptXml) - match response with - | None -> return None - | Some raw -> - if verbose then - tracefn "Response from %s:" url - tracefn "" - tracefn "%s" raw - return Some(parseODataDetails(nugetURL,packageName,version,raw)) - with - | _ -> return None } - - let checkPackagesODataWithVersion = async { - try - let url = sprintf "%s/odata/Packages(Id='%O',Version='%O')" nugetURL packageName version - let! raw = getXmlFromUrl(auth,url) - + + let! raw = + match response with + | Some(r) -> async { return r } + | None -> + let url = sprintf "%s/odata/Packages(Id='%O',Version='%O')" nugetURL packageName version + getXmlFromUrl(auth,url) + if verbose then tracefn "Response from %s:" url tracefn "" tracefn "%s" raw - return Some(parseODataDetails(nugetURL,packageName,version,raw)) - with - | _ -> return None } - - - async { - let! result = - [checkODataWithNormalizedVersion - checkODataWithVersion - checkPackagesWithVersion - checkPackagesODataWithVersion ] - |> Async.Choice - - match result with - | Some x -> return x - | None -> - failwithf "Could not get package details for %O %O from %s." packageName version nugetURL - return Unchecked.defaultof<_> // bug in F# 3.0 compiler remove line in F# F 4.0 - } + return parseODataDetails(nugetURL,packageName,version,raw) + } let private loadFromCacheOrODataOrV3 force fileName (auth,nugetURL) package version = async { @@ -285,7 +259,8 @@ let getDetailsFromNuGet force auth nugetURL packageName version = nugetURL packageName version - (fun () -> getDetailsFromNuGetViaOData auth nugetURL packageName version) + (fun () -> + getDetailsFromNuGetViaOData auth nugetURL packageName version) let fixDatesInArchive fileName =