Skip to content

Commit 2e79949

Browse files
committed
UpdatePackageVersion was uncovered and rewrite introduced bugs
1 parent 9469f9d commit 2e79949

2 files changed

Lines changed: 54 additions & 12 deletions

File tree

‎src/Paket.Core/DependenciesFile.fs‎

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -273,16 +273,19 @@ type DependenciesFile(fileName,options,sources,packages : PackageRequirement lis
273273
let packages = packages |> Seq.toList
274274
let dependencyMap = Map.ofSeq (packages |> Seq.map (fun p -> p.Name, p.VersionRequirement))
275275

276+
let isPackageLine name (l : string) =
277+
let splitted = l.Split(' ') |> Array.map (fun s -> s.ToLower())
278+
splitted |> Array.exists ((=) "nuget") && splitted |> Array.exists ((=) name)
279+
276280
let tryFindPackageLine (packageName:PackageName) =
277281
let name = packageName.ToString().ToLower()
278282
textRepresentation
279-
|> Array.tryFindIndex (fun (l:string) ->
280-
let splitted = l.Split(' ') |> Array.map (fun s -> s.ToLower())
281-
splitted |> Array.exists ((=) "nuget") && splitted |> Array.exists ((=) name))
283+
|> Array.tryFindIndex (isPackageLine name)
282284

283285
member __.DirectDependencies = dependencyMap
284286
member __.Packages = packages
285287
member __.HasPackage (name : PackageName) = packages |> List.exists (fun p -> NormalizedPackageName p.Name = NormalizedPackageName name)
288+
member __.GetPackage (name : PackageName) = packages |> List.find (fun p -> NormalizedPackageName p.Name = NormalizedPackageName name)
286289
member __.RemoteFiles = remoteFiles
287290
member __.Options = options
288291
member __.FileName = fileName
@@ -418,18 +421,23 @@ type DependenciesFile(fileName,options,sources,packages : PackageRequirement lis
418421
traceWarnfn "%s doesn't contain package %s. ==> Ignored" fileName name
419422
this
420423

421-
member this.UpdatePackageVersion(packageName, version) =
424+
member this.UpdatePackageVersion(packageName, version:string) =
422425
let (PackageName name) = packageName
423426
if this.HasPackage(packageName) then
424-
let versionRequirement = DependenciesFileParser.parseVersionRequirement version
427+
let versionRequirement = DependenciesFileParser.parseVersionRequirement (version.Trim '!')
428+
let resolverStrategy = DependenciesFileParser.parseResolverStrategy version
429+
425430
tracefn "Updating %s version to %s in %s" name version fileName
426-
let packages =
427-
this.Packages |> List.map (fun p ->
428-
if NormalizedPackageName p.Name = NormalizedPackageName packageName then
429-
{ p with VersionRequirement = versionRequirement }
430-
else p)
431-
DependenciesFile(this.FileName, this.Options, sources, packages, this.RemoteFiles, textRepresentation)
432-
else
431+
let newLines =
432+
this.Lines |> Array.map (fun l ->
433+
let name = packageName.ToString().ToLower()
434+
if isPackageLine name l then
435+
let p = this.GetPackage packageName
436+
DependenciesFileSerializer.packageString packageName versionRequirement resolverStrategy p.Settings
437+
else l)
438+
439+
DependenciesFile(DependenciesFileParser.parseDependenciesFile this.FileName newLines)
440+
else
433441
traceWarnfn "%s doesn't contain package %s. ==> Ignored" fileName name
434442
this
435443

‎tests/Paket.Tests/DependenciesFile/AddPackageSpecs.fs‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,38 @@ nuget FAKE"""
187187
DependenciesFile.FromCode(before)
188188
.Add(PackageName "FAKE","")
189189
.ToString()
190+
|> shouldEqual (normalizeLineEndings expected)
191+
192+
[<Test>]
193+
let ``should update packages with new version``() =
194+
let config = """source https://nuget.org/api/v2
195+
196+
nuget FAKE 1.1
197+
"""
198+
199+
let cfg = DependenciesFile.FromCode(config).UpdatePackageVersion(PackageName "FAKE","1.2")
200+
201+
let expected = """source https://nuget.org/api/v2
202+
203+
nuget FAKE 1.2
204+
"""
205+
206+
cfg.ToString()
207+
|> shouldEqual (normalizeLineEndings expected)
208+
209+
[<Test>]
210+
let ``should update packages with nuget package resolution strategy``() =
211+
let config = """source https://nuget.org/api/v2
212+
213+
nuget FAKE ~> 1.1
214+
"""
215+
216+
let cfg = DependenciesFile.FromCode(config).UpdatePackageVersion(PackageName "FAKE","!~> 1.2")
217+
218+
let expected = """source https://nuget.org/api/v2
219+
220+
nuget FAKE !~> 1.2
221+
"""
222+
223+
cfg.ToString()
190224
|> shouldEqual (normalizeLineEndings expected)

0 commit comments

Comments
 (0)