Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Paket should keep paket.dependencies as stable as possible #802

Merged
merged 3 commits into from
Apr 30, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
254 changes: 116 additions & 138 deletions src/Paket.Core/DependenciesFile.fs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/Paket.Core/Environment.fs
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,5 @@ module PaketEnv =
let dependenciesFile =
DependenciesFile(
Path.Combine(directory.FullName, Constants.DependenciesFileName),
InstallOptions.Default, [], [], [], [])
InstallOptions.Default, [], [], [], [||])
dependenciesFile.ToString() |> saveFile dependenciesFile.FileName
2 changes: 1 addition & 1 deletion src/Paket.Core/FindOutdated.fs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ let private adjustVersionRequirements strict includingPrereleases (dependenciesF
| false,false -> VersionRequirement.AllReleases, ResolverStrategy.Max
{ p with VersionRequirement = requirement; ResolverStrategy = strategy})

DependenciesFile(dependenciesFile.FileName, dependenciesFile.Options, dependenciesFile.Sources, newPackages, dependenciesFile.RemoteFiles, dependenciesFile.Comments)
DependenciesFile(dependenciesFile.FileName, dependenciesFile.Options, dependenciesFile.Sources, newPackages, dependenciesFile.RemoteFiles, dependenciesFile.Lines) // TODO: fix me

let private detectOutdated (oldResolution: PackageResolver.PackageResolution) (newResolution: PackageResolver.PackageResolution) =
[for kv in oldResolution do
Expand Down
12 changes: 10 additions & 2 deletions src/Paket.Core/NugetConvert.fs
Original file line number Diff line number Diff line change
Expand Up @@ -292,8 +292,16 @@ let createDependenciesFileR (rootDirectory : DirectoryInfo) nugetEnv mode =

sources
|> lift (fun sources ->
let packages = packages |> List.map (fun (name,v,restr) -> createPackageRequirement (name, v, restr) sources dependenciesFileName)
Paket.DependenciesFile(dependenciesFileName, InstallOptions.Default, sources, packages, [], []))
let sourceLines = sources |> List.map (fun s -> DependenciesFileSerializer.sourceString(s.ToString()))
let packageLines =
packages
|> List.map (fun (name,v,restr) ->
let vr = createPackageRequirement (name, v, restr) sources dependenciesFileName
DependenciesFileSerializer.packageString vr.Name vr.VersionRequirement vr.ResolverStrategy vr.Settings)

let newLines = sourceLines @ [""] @ packageLines |> Seq.toArray

Paket.DependenciesFile(DependenciesFileParser.parseDependenciesFile dependenciesFileName newLines))

if File.Exists dependenciesFileName then read() else create()

Expand Down
9 changes: 5 additions & 4 deletions src/Paket.Core/Simplifier.fs
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,12 @@ let simplifyDependenciesFile (dependenciesFile : DependenciesFile, flatLookup, i
let packages = dependenciesFile.Packages |> List.map (fun p -> p.Name)
let! transitive = findTransitive(packages, flatLookup, DependencyNotFoundInLockFile)

let newPackages =
return
dependenciesFile.Packages
|> List.filter (fun package -> not <| removePackage(package.Name, transitive, dependenciesFile.FileName, interactive))
let d = dependenciesFile
return DependenciesFile(d.FileName, d.Options, d.Sources, newPackages, d.RemoteFiles, d.Comments)
|> List.fold (fun (d:DependenciesFile) package ->
if removePackage(package.Name, transitive, dependenciesFile.FileName, interactive) then
d.Remove(package.Name)
else d) dependenciesFile
}

let simplifyReferencesFile (refFile, flatLookup, interactive) = trial {
Expand Down
2 changes: 1 addition & 1 deletion src/Paket/Paket.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
<StartProgram>paket.exe</StartProgram>
<StartWorkingDirectory>D:\code\Pakettest</StartWorkingDirectory>
<StartWorkingDirectory>D:\code\Paketkopie</StartWorkingDirectory>
<StartArguments>add nuget fake</StartArguments>
<StartArguments>add nuget FSharp.Core</StartArguments>
<StartAction>Project</StartAction>
<StartProgram>paket.exe</StartProgram>
<StartWorkingDirectory>D:\code\Pakettest</StartWorkingDirectory>
Expand Down
78 changes: 69 additions & 9 deletions tests/Paket.Tests/DependenciesFile/AddPackageSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ nuget SignalR = 3.3.2"""

nuget Castle.Windsor-log4net ~> 3.2
nuget Rx-Main ~> 2.0
nuget FAKE 1.1
nuget SignalR 3.3.2
nuget FAKE = 1.1
nuget SignalR = 3.3.2
nuget xunit"""

cfg.ToString()
Expand All @@ -42,10 +42,10 @@ nuget SignalR = 3.3.2"""
let expected = """source http://nuget.org/api/v2

nuget Castle.Windsor-log4net ~> 3.2
nuget FAKE 1.1
nuget FAKE = 1.1
nuget Rx-Main ~> 2.0
nuget Rz
nuget SignalR 3.3.2"""
nuget SignalR = 3.3.2"""

cfg.ToString()
|> shouldEqual (normalizeLineEndings expected)
Expand All @@ -67,7 +67,7 @@ github forki/FsUnit FsUnit.fs"""

nuget Castle.Windsor-log4net ~> 3.2
nuget Rx-Main ~> 2.0
nuget FAKE 1.1
nuget FAKE = 1.1
nuget NuGet.CommandLine
nuget xunit

Expand Down Expand Up @@ -105,7 +105,6 @@ nuget Castle.Windsor-log4net ~> 3.2"""
let cfg = DependenciesFile.FromCode(config).Add(PackageName "FAKE","1.2")

let expected = """source http://nuget.org/api/v2

nuget Castle.Windsor-log4net ~> 3.2
nuget FAKE 1.2"""

Expand All @@ -129,13 +128,14 @@ github forki/FsUnit FsUnit.fs"""

[<Test>]
let ``should add new packages with nuget package resolution strategy``() =
let config = """"""
let config = ""

let cfg = DependenciesFile.FromCode(config).Add(PackageName "FAKE","!~> 1.2")

let expected = """source https://nuget.org/api/v2

nuget FAKE !~> 1.2"""
nuget FAKE !~> 1.2
"""

cfg.ToString()
|> shouldEqual (normalizeLineEndings expected)
Expand All @@ -161,4 +161,64 @@ nuget Rx-Main ~> 2.0
nuget FAKE = 1.1
nuget SignalR = 3.3.2"""

DependenciesFile.FromCode(config).Add(PackageName "fAKe","") |> ignore
DependenciesFile.FromCode(config).Add(PackageName "fAKe","") |> ignore

[<Test>]
let ``should keep sources stable``() =
let before = """source https://www.nuget.org/api/v2

nuget quicksilver
nuget FsCheck

source https://www.nuget.org/api/v3

nuget NUnit"""

let expected = """source https://www.nuget.org/api/v2

nuget quicksilver
nuget FsCheck

source https://www.nuget.org/api/v3

nuget NUnit
nuget FAKE"""

DependenciesFile.FromCode(before)
.Add(PackageName "FAKE","")
.ToString()
|> shouldEqual (normalizeLineEndings expected)

[<Test>]
let ``should update packages with new version``() =
let config = """source https://nuget.org/api/v2

nuget FAKE 1.1
"""

let cfg = DependenciesFile.FromCode(config).UpdatePackageVersion(PackageName "FAKE","1.2")

let expected = """source https://nuget.org/api/v2

nuget FAKE 1.2
"""

cfg.ToString()
|> shouldEqual (normalizeLineEndings expected)

[<Test>]
let ``should update packages with nuget package resolution strategy``() =
let config = """source https://nuget.org/api/v2

nuget FAKE ~> 1.1
"""

let cfg = DependenciesFile.FromCode(config).UpdatePackageVersion(PackageName "FAKE","!~> 1.2")

let expected = """source https://nuget.org/api/v2

nuget FAKE !~> 1.2
"""

cfg.ToString()
|> shouldEqual (normalizeLineEndings expected)
58 changes: 58 additions & 0 deletions tests/Paket.Tests/DependenciesFile/RemovePackageSpecs.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
module paket.dependenciesFile.RemovePackageSpecs

open Paket
open NUnit.Framework
open FsUnit
open TestHelpers
open Paket.Domain

[<Test>]
let ``should remove the right package``() =
let config = """source http://nuget.org/api/v2

nuget Castle.Windsor-log4net ~> 3.2
nuget Rx-Main ~> 2.0
nuget FAKE = 1.1
nuget SignalR = 3.3.2"""

let cfg = DependenciesFile.FromCode(config).Remove(PackageName "FAKE")

let expected = """source http://nuget.org/api/v2

nuget Castle.Windsor-log4net ~> 3.2
nuget Rx-Main ~> 2.0
nuget SignalR = 3.3.2"""

cfg.ToString()
|> shouldEqual (normalizeLineEndings expected)

[<Test>]
let ``should remove only the correct package``() =
let config = """source http://nuget.org/api/v2

nuget Castle.Windsor-log4net ~> 3.2
nuget Castle.Windsor ~> 3.2"""

let cfg = DependenciesFile.FromCode(config).Remove(PackageName "Castle.Windsor")

let expected = """source http://nuget.org/api/v2

nuget Castle.Windsor-log4net ~> 3.2"""

cfg.ToString()
|> shouldEqual (normalizeLineEndings expected)

[<Test>]
let ``should keep stable if package doesn't exist``() =
let config = """source http://nuget.org/api/v2

nuget Castle.Windsor-log4net ~> 3.2"""

let cfg = DependenciesFile.FromCode(config).Remove(PackageName "Castle.Windsor")

let expected = """source http://nuget.org/api/v2

nuget Castle.Windsor-log4net ~> 3.2"""

cfg.ToString()
|> shouldEqual (normalizeLineEndings expected)
16 changes: 0 additions & 16 deletions tests/Paket.Tests/DependenciesFile/SaveSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,6 @@ let ``should serialize strict config``() =
|> shouldEqual (normalizeLineEndings strictConfig)


let configWithNoRestriction = """source http://nuget.org/api/v2

nuget FAKE >= 0"""

let configWithNoRestriction2 = """source http://nuget.org/api/v2

nuget FAKE"""


[<Test>]
let ``should remove >= 0 from config``() =
let cfg = DependenciesFile.FromCode(configWithNoRestriction)

cfg.ToString()
|> shouldEqual (normalizeLineEndings configWithNoRestriction2)

let contentNoneConfig = """redirects: on
content: none
source http://nuget.org/api/v2
Expand Down
1 change: 1 addition & 0 deletions tests/Paket.Tests/Paket.Tests.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@
<Compile Include="DependenciesFile\ParserSpecs.fs" />
<Compile Include="DependenciesFile\SaveSpecs.fs" />
<Compile Include="DependenciesFile\AddPackageSpecs.fs" />
<Compile Include="DependenciesFile\RemovePackageSpecs.fs" />
<Compile Include="DependenciesFile\DependencyChangesSpecs.fs" />
<Compile Include="Resolver\DependencyGraphSpecs.fs" />
<Compile Include="Resolver\SimpleDependenciesSpecs.fs" />
Expand Down
9 changes: 9 additions & 0 deletions tests/Paket.Tests/Simplifier/BasicScenarioSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,12 @@ let ``should remove all transitive dependencies from dep file recursively``() =
depFile.Packages |> List.map (fun p -> p.Name) |> shouldEqual [PackageName"A";PackageName"C"]
refFiles.Head.NugetPackages |> shouldEqual [PackageInstallSettings.Default("A"); PackageInstallSettings.Default("C")]
refFiles.Tail.Head.NugetPackages |> shouldEqual [PackageInstallSettings.Default("C"); PackageInstallSettings.Default("D")]

let expected = """
source http://nuget.org/api/v2

nuget A 1.0
nuget C 1.0"""

depFile.ToString()
|> shouldEqual (normalizeLineEndings expected)