Skip to content

Commit a2977e1

Browse files
committed
Fixes lock file restrictions parsing
1 parent ea07139 commit a2977e1

2 files changed

Lines changed: 43 additions & 13 deletions

File tree

‎src/Paket.Core/LockFile.fs‎

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,16 @@ module LockFileParser =
208208
let Parse(lockFileLines) =
209209
let remove textToRemove (source:string) = source.Replace(textToRemove, "")
210210
let removeBrackets = remove "(" >> remove ")"
211+
let parsePackage (s : string) =
212+
let parts = s.Split([|" - "|],StringSplitOptions.None)
213+
let optionsString =
214+
if parts.Length < 2 then "" else
215+
if parts.[1] <> "" && parts.[1].Contains(":") |> not then
216+
("framework: " + parts.[1]) // TODO: This is for backwards-compat and should be removed later
217+
else
218+
parts.[1]
219+
parts.[0],InstallSettings.Parse(optionsString)
220+
211221
([{ GroupName = Constants.MainDependencyGroup; RepositoryType = None; RemoteUrl = None; Packages = []; SourceFiles = []; Options = InstallOptions.Default; LastWasPackage = false }], lockFileLines)
212222
||> Seq.fold(fun state line ->
213223
match state with
@@ -234,15 +244,9 @@ module LockFileParser =
234244
| NugetPackage details ->
235245
match currentGroup.RemoteUrl with
236246
| Some remote ->
237-
let parts = details.Split([|" - "|],StringSplitOptions.None)
238-
let parts' = parts.[0].Split ' '
247+
let package,settings = parsePackage details
248+
let parts' = package.Split ' '
239249
let version = parts'.[1] |> removeBrackets
240-
let optionsString =
241-
if parts.Length < 2 then "" else
242-
if parts.[1] <> "" && parts.[1].Contains(":") |> not then
243-
("framework: " + parts.[1]) // TODO: This is for backwards-compat and should be removed later
244-
else
245-
parts.[1]
246250

247251
{ currentGroup with
248252
LastWasPackage = true
@@ -251,19 +255,17 @@ module LockFileParser =
251255
Name = PackageName parts'.[0]
252256
Dependencies = Set.empty
253257
Unlisted = false
254-
Settings = InstallSettings.Parse(optionsString)
258+
Settings = settings
255259
Version = SemVer.Parse version } :: currentGroup.Packages }::otherGroups
256260
| None -> failwith "no source has been specified."
257261
| NugetDependency (name, v) ->
258-
let parts = v.Split([|" - "|],StringSplitOptions.None)
259-
let version = parts.[0]
260-
let restrictions = if parts.Length <= 1 then [] else parseRestrictions parts.[1]
262+
let version,settings = parsePackage v
261263
if currentGroup.LastWasPackage then
262264
match currentGroup.Packages with
263265
| currentPackage :: otherPackages ->
264266
{ currentGroup with
265267
Packages = { currentPackage with
266-
Dependencies = Set.add (PackageName name, DependenciesFileParser.parseVersionRequirement version, restrictions) currentPackage.Dependencies
268+
Dependencies = Set.add (PackageName name, DependenciesFileParser.parseVersionRequirement version, settings.FrameworkRestrictions) currentPackage.Dependencies
267269
} :: otherPackages } ::otherGroups
268270
| [] -> failwithf "cannot set a dependency to %s %s - no package has been specified." name v
269271
else

‎tests/Paket.Tests/Lockfile/ParserSpecs.fs‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,12 +273,26 @@ let ``should parse framework restricted lock file``() =
273273
let packages = List.rev lockFile.Packages
274274
packages.Length |> shouldEqual 7
275275

276+
packages.[0].Dependencies |> Set.toList |> List.map (fun (_, _, r) -> r)
277+
|> List.item 2
278+
|> shouldEqual ([FrameworkRestriction.AtLeast(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V4_Client))])
279+
276280
packages.[3].Source |> shouldEqual PackageSources.DefaultNugetSource
277281
packages.[3].Name |> shouldEqual (PackageName "LinqBridge")
278282
packages.[3].Version |> shouldEqual (SemVer.Parse "1.3.0")
279283
packages.[3].Settings.FrameworkRestrictions |> shouldEqual ([FrameworkRestriction.Between(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V2),FrameworkIdentifier.DotNetFramework(FrameworkVersion.V3_5))])
280284
packages.[3].Settings.ImportTargets |> shouldEqual None
281285

286+
let dependencies4 =
287+
packages.[4].Dependencies |> Set.toList |> List.map (fun (_, _, r) -> r)
288+
289+
dependencies4.Head
290+
|> shouldEqual ([FrameworkRestriction.Between(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V2), FrameworkIdentifier.DotNetFramework(FrameworkVersion.V3_5))])
291+
dependencies4.Tail.Head
292+
|> shouldEqual ([FrameworkRestriction.Exactly(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V2))
293+
FrameworkRestriction.Exactly(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V3_5))
294+
FrameworkRestriction.AtLeast(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V4_Client))])
295+
282296
packages.[5].Source |> shouldEqual PackageSources.DefaultNugetSource
283297
packages.[5].Name |> shouldEqual (PackageName "ReadOnlyCollectionInterfaces")
284298
packages.[5].Version |> shouldEqual (SemVer.Parse "1.0.0")
@@ -312,6 +326,10 @@ let ``should parse framework restricted lock file in new syntax``() =
312326
let packages = List.rev lockFile.Packages
313327
packages.Length |> shouldEqual 7
314328

329+
packages.[0].Dependencies |> Set.toList |> List.map (fun (_, _, r) -> r)
330+
|> List.item 2
331+
|> shouldEqual ([FrameworkRestriction.AtLeast(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V4_Client))])
332+
315333
packages.[3].Source |> shouldEqual PackageSources.DefaultNugetSource
316334
packages.[3].Name |> shouldEqual (PackageName "LinqBridge")
317335
packages.[3].Version |> shouldEqual (SemVer.Parse "1.3.0")
@@ -321,6 +339,16 @@ let ``should parse framework restricted lock file in new syntax``() =
321339
packages.[3].Settings.IncludeVersionInPath |> shouldEqual (Some true)
322340
packages.[3].Settings.OmitContent |> shouldEqual (Some ContentCopySettings.Omit)
323341

342+
let dependencies4 =
343+
packages.[4].Dependencies |> Set.toList |> List.map (fun (_, _, r) -> r)
344+
345+
dependencies4.Head
346+
|> shouldEqual ([FrameworkRestriction.Between(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V2), FrameworkIdentifier.DotNetFramework(FrameworkVersion.V3_5))])
347+
dependencies4.Tail.Head
348+
|> shouldEqual ([FrameworkRestriction.Exactly(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V2))
349+
FrameworkRestriction.Exactly(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V3_5))
350+
FrameworkRestriction.AtLeast(FrameworkIdentifier.DotNetFramework(FrameworkVersion.V4_Client))])
351+
324352
packages.[5].Source |> shouldEqual PackageSources.DefaultNugetSource
325353
packages.[5].Name |> shouldEqual (PackageName "ReadOnlyCollectionInterfaces")
326354
packages.[5].Version |> shouldEqual (SemVer.Parse "1.0.0")

0 commit comments

Comments
 (0)