diff --git a/src/Paket.Core/Dependencies/NuGetV2.fs b/src/Paket.Core/Dependencies/NuGetV2.fs
index 6f7d984549..d8baaefc3b 100644
--- a/src/Paket.Core/Dependencies/NuGetV2.fs
+++ b/src/Paket.Core/Dependencies/NuGetV2.fs
@@ -76,7 +76,7 @@ let private followODataLink auth url =
let mutable uri = null // warn once per specific API endpoint, but try to cut the query
let baseUrl = if Uri.TryCreate(url, UriKind.Absolute, &uri) then uri.AbsolutePath else url
traceWarnIfNotBefore baseUrl
- "At least one 'next' link (index %d) returned a empty result (noticed on '%O'): ['%s']"
+ "At least one 'next' link (index %d) returned a empty result (noticed on '%O'): ['%s']"
i url (System.String.Join("' ; '", linksToFollow))
| None -> ()
return
@@ -179,10 +179,11 @@ let private handleODataEntry nugetURL packageName version entry =
| Some node -> node.InnerText
| _ -> ""
+ // If a package has no dependencies, JFrog Artifactory will return an XML structure without the Dependencies node.
let dependencies =
match entry |> getNode "properties" |> optGetNode "Dependencies" with
| Some node -> node.InnerText
- | None -> failwithf "unable to find dependencies for package %O %O" packageName version
+ | None -> ""
let rawPackages =
let split (d : string) =
@@ -195,7 +196,7 @@ let private handleODataEntry nugetURL packageName version entry =
| Some p ->
Some p
| None ->
- if not (restriction.StartsWith "_") then
+ if not (restriction.StartsWith "_") then
Logging.traceWarnIfNotBefore ("Package", restriction, packageName, version) "Could not detect any platforms from '%s' in package %O %O, please tell the package authors" restriction packageName version
None
else Some PlatformMatching.ParsedPlatformPath.Empty)
@@ -480,5 +481,3 @@ let FindPackages(auth, nugetURL, packageNamePrefix, maxResults) =
with e ->
return FSharp.Core.Result.Error (ExceptionDispatchInfo.Capture e)
}
-
-
diff --git a/tests/Paket.Tests/NuGetOData/NoDependenciesNode.xml b/tests/Paket.Tests/NuGetOData/NoDependenciesNode.xml
new file mode 100644
index 0000000000..d1f5fe8716
--- /dev/null
+++ b/tests/Paket.Tests/NuGetOData/NoDependenciesNode.xml
@@ -0,0 +1,44 @@
+
+
+ http://doesntmatter/Packages(Id='NoDeps',Version='1.0.0')
+
+
+ NoDeps
+ Package without any dependencies, as returned by JFrog Artifactory.
+ 2020-01-01T00:00:00Z
+
+ Someone
+
+
+
+
+ 1.0.0
+ 1.0.0
+
+ 2020-01-01T00:00:00.000
+ A package with no dependencies node in the OData response (e.g. JFrog Artifactory).
+ 0
+ http://doesntmatter/packages/NoDeps/1.0.0
+
+ true
+ true
+ false
+
+ 2020-01-01T00:00:00.000
+ AAAA
+ SHA512
+ 1234
+
+ http://doesntmatter/package/ReportAbuse/NoDeps/1.0.0
+
+ false
+
+ NoDeps
+ 0
+
+
+ http://doesntmatter/license
+
+
+
+
diff --git a/tests/Paket.Tests/NuGetOData/ODataSpecs.fs b/tests/Paket.Tests/NuGetOData/ODataSpecs.fs
index e8bfa97f5b..ecfbd18be1 100644
--- a/tests/Paket.Tests/NuGetOData/ODataSpecs.fs
+++ b/tests/Paket.Tests/NuGetOData/ODataSpecs.fs
@@ -149,6 +149,19 @@ let ``can detect explicit dependencies for Microsoft.AspNet.WebApi.Client``() =
FrameworkRestriction.And [getPortableRestriction("portable-net45+win8+wp8+wp81+wpa81"); FrameworkRestriction.NotAtLeast(DotNetFramework(FrameworkVersion.V4_5))]
|> ExplicitRestriction)
+[]
+let ``can parse package without Dependencies node as no dependencies``() =
+ parseEntry "NuGetOData/NoDependenciesNode.xml"
+ |> shouldEqual
+ { PackageName = "NoDeps"
+ DownloadUrl = "http://doesntmatter/package/NoDeps/1.0.0"
+ SerializedDependencies = []
+ Unlisted = false
+ LicenseUrl = "http://doesntmatter/license"
+ CacheVersion = NuGet.NuGetPackageCache.CurrentCacheVersion
+ Version = "1.0.0"
+ SourceUrl = fakeUrl }
+
[]
let ``can ignore unknown frameworks``() =
let parsed = parseList "NuGetOData/BenchmarkDotNet-UnknownFramework.xml" |> ODataSearchResult.get
diff --git a/tests/Paket.Tests/Paket.Tests.fsproj b/tests/Paket.Tests/Paket.Tests.fsproj
index b07186ecb6..f53cffdd8c 100644
--- a/tests/Paket.Tests/Paket.Tests.fsproj
+++ b/tests/Paket.Tests/Paket.Tests.fsproj
@@ -83,6 +83,7 @@
+