Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: fsprojects/Paket
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: b71f50fdc4e938f0f978bea146a20c2451a2e796
Choose a base ref
..
head repository: fsprojects/Paket
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 385a821cc79809313dce00888dac51b13667beac
Choose a head ref
Showing with 694 additions and 341 deletions.
  1. +8 −4 Paket.sln
  2. +9 −1 RELEASE_NOTES.md
  3. +14 −6 build.fsx
  4. +2 −2 docs/content/commands/config.md
  5. +27 −0 docs/content/dependencies-file.md
  6. +6 −2 docs/content/nuget-dependencies.md
  7. +4 −0 docs/content/paket-and-dotnet-cli.md
  8. +2 −1 integrationtests/Paket.IntegrationTests/BasicResolverSpecs.fs
  9. 0 integrationtests/scenarios/{i000051-resolve-pessimistic → i000051}/before/paket.dependencies
  10. +6 −6 src/Paket.Bootstrapper/Properties/AssemblyInfo.cs
  11. +1 −0 src/Paket.Core.preview3/Paket.Core.fsproj
  12. +6 −6 src/Paket.Core/AssemblyInfo.fs
  13. +1 −1 src/Paket.Core/Common/Constants.fs
  14. +76 −15 src/Paket.Core/Common/Utils.fs
  15. +21 −0 src/Paket.Core/Dependencies/CacheExtensions.fs
  16. +10 −0 src/Paket.Core/Dependencies/DependenciesFileParser.fs
  17. +27 −11 src/Paket.Core/Dependencies/NuGet.fs
  18. +80 −65 src/Paket.Core/Dependencies/NuGetCache.fs
  19. +1 −1 src/Paket.Core/Dependencies/NuGetV2.fs
  20. +23 −15 src/Paket.Core/Dependencies/NuGetV3.fs
  21. +1 −6 src/Paket.Core/Dependencies/Nuspec.fs
  22. +19 −0 src/Paket.Core/Dependencies/PackageResolver.fs
  23. +1 −1 src/Paket.Core/Dependencies/RemoteUpload.fs
  24. +5 −6 src/Paket.Core/Installation/DependencyChangeDetection.fs
  25. +51 −20 src/Paket.Core/Installation/GarbageCollection.fs
  26. +12 −32 src/Paket.Core/Installation/InstallProcess.fs
  27. +30 −18 src/Paket.Core/Installation/RestoreProcess.fs
  28. +2 −2 src/Paket.Core/Installation/ScriptGeneration.fs
  29. +1 −1 src/Paket.Core/Installation/UpdateProcess.fs
  30. +10 −6 src/Paket.Core/PackageAnalysis/Queries.fs
  31. +1 −1 src/Paket.Core/PackageManagement/AddProcess.fs
  32. +9 −9 src/Paket.Core/PackageManagement/NugetConvert.fs
  33. +1 −1 src/Paket.Core/PackageManagement/RemoveProcess.fs
  34. +1 −1 src/Paket.Core/Packaging/PackageMetaData.fs
  35. +3 −2 src/Paket.Core/Paket.Core.fsproj
  36. +4 −5 src/Paket.Core/PaketConfigFiles/DependencyCache.fs
  37. +30 −11 src/Paket.Core/PaketConfigFiles/LockFile.fs
  38. +1 −1 src/Paket.Core/PaketConfigFiles/ProjectFile.fs
  39. +1 −0 src/Paket.Core/PaketConfigFiles/ReferencesFile.fs
  40. +13 −6 src/Paket.Core/PaketConfigFiles/RuntimeGraph.fs
  41. +7 −8 src/Paket.Core/PublicAPI.fs
  42. +21 −8 src/Paket.Core/Versioning/ConfigFile.fs
  43. +27 −19 src/Paket.Core/Versioning/PackageSources.fs
  44. +18 −18 src/Paket.Core/Versioning/PlatformMatching.fs
  45. +16 −2 src/Paket.Core/Versioning/Requirements.fs
  46. +6 −6 src/Paket/AssemblyInfo.fs
  47. +2 −0 src/Paket/Commands.fs
  48. +6 −2 src/Paket/Program.fs
  49. +7 −1 src/Paket/embedded/Paket.Restore.targets
  50. +43 −7 tests/Paket.Tests/DependenciesFile/ParserSpecs.fs
  51. +2 −2 tests/Paket.Tests/NuGetConfig/NuGetConfigSpecs.fs
  52. +18 −2 tests/Paket.Tests/Versioning/ConfigFileSpecs.fs
  53. +1 −1 tests/Paket.Tests/Versioning/ExtractPackageSpecs.fs
12 changes: 8 additions & 4 deletions Paket.sln
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26430.6
VisualStudioVersion = 15.0.26730.8
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{A6A6AF7D-D6E3-442D-9B1E-58CC91879BE1}"
EndProject
@@ -54,6 +54,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "content", "content", "{8E6D
docs\content\local-file.md = docs\content\local-file.md
docs\content\lock-file.md = docs\content\lock-file.md
docs\content\nuget-dependencies.md = docs\content\nuget-dependencies.md
docs\content\paket-and-dotnet-cli.md = docs\content\paket-and-dotnet-cli.md
docs\content\paket-folder.md = docs\content\paket-folder.md
docs\content\paket.dependencies = docs\content\paket.dependencies
docs\content\paket.lock = docs\content\paket.lock
@@ -109,9 +110,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{62D18A
EndProjectSection
EndProject
Global
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
@@ -153,6 +151,12 @@ Global
{7C622582-E281-4EAB-AADA-B5893BB89B45} = {ED8079DD-2B06-4030-9F0F-DC548F98E1C4}
{7234B9B4-8CF5-4E68-AA29-050C087B9246} = {ED8079DD-2B06-4030-9F0F-DC548F98E1C4}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {61E9964A-34E0-4B78-8854-B092E6764056}
EndGlobalSection
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
10 changes: 9 additions & 1 deletion RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
#### 5.89.1 - 21.08.2017
#### 5.91.0 - 26.08.2017
* BUGFIX: fix a bug in the runtime parser - https://github.com/fsprojects/Paket/pull/2665
* BUGFIX: Add props to correct Paket.Restore.targets - https://github.com/fsprojects/Paket/pull/2665
* Make packages folder optional - https://github.com/fsprojects/Paket/pull/2638

#### 5.90.1 - 25.08.2017
* Support for NTLM auth - https://github.com/fsprojects/Paket/pull/2658
* BUGFIX: fix-nuspecs should break at ; - https://github.com/fsprojects/Paket/issues/2661
* BUGFIX: V3 normalization fix for https://github.com/fsprojects/Paket/issues/2652
* BUGFIX: fix crash when a package contains an invalid file - https://github.com/fsprojects/Paket/pull/2644

#### 5.89.0 - 21.08.2017
20 changes: 14 additions & 6 deletions build.fsx
Original file line number Diff line number Diff line change
@@ -531,13 +531,21 @@ open Octokit

Target "ReleaseGitHub" (fun _ ->
let user =
match getBuildParam "github_user", getBuildParam "github-user" with
| s, _ | _, s when not (String.IsNullOrWhiteSpace s) -> s
| _ -> getUserInput "Username: "
match getBuildParam "github_user" with
| s when not (String.IsNullOrWhiteSpace s) -> s
| _ ->
eprintfn "Please update your release script to set 'github_user'!"
match getBuildParam "github-user" with
| s when not (String.IsNullOrWhiteSpace s) -> s
| _ -> getUserInput "Username: "
let pw =
match getBuildParam "github_pw", getBuildParam "github-pw" with
| s, _ | _, s when not (String.IsNullOrWhiteSpace s) -> s
| _ -> getUserPassword "Password: "
match getBuildParam "github_password" with
| s when not (String.IsNullOrWhiteSpace s) -> s
| _ ->
eprintfn "Please update your release script to set 'github_password'!"
match getBuildParam "github_pw", getBuildParam "github-pw" with
| s, _ | _, s when not (String.IsNullOrWhiteSpace s) -> s
| _ -> getUserPassword "Password: "
let remote =
Git.CommandHelper.getGitResult "" "remote -v"
|> Seq.filter (fun (s: string) -> s.EndsWith("(push)"))
4 changes: 2 additions & 2 deletions docs/content/commands/config.md
Original file line number Diff line number Diff line change
@@ -6,8 +6,8 @@
paket config add-credentials <source URL>
```

Paket will then ask you for the username and password that will be used for the
specified `<source URL>`.
Paket will then ask you for the username, password, and authentication type that
will be used for the specified `<source URL>`.

The credentials you enter here will then be used for `source`s in the
[`paket.dependencies` file](nuget-dependencies.html) that match `<source URL>`
27 changes: 27 additions & 0 deletions docs/content/dependencies-file.md
Original file line number Diff line number Diff line change
@@ -155,6 +155,33 @@ nuget Example >= 2.0
If you change the target framework of the projects then you need to run
[`paket install`](paket-install.html) again.

### Disable packages folder

With the net netcore release and the switch to provide more and more netstandard-only packages
the Paket team noticed an dramatic increase of the well known "packages" folder.
Historically one way was to tell Paket that you only want to compile for `framework: net45`.
However, this doesn't prevent netstandard dependencies in all situations.
On the other side more features are provided by Paket and the packages folder has become more and more redundant:
- Load scripts can reference the files in the global cache
- csproj/fsproj files can references files in the global cache
- netcore project files don't require any explicit dll-references
Therefore, the paket team decided to make the "packages" folder opt-out.

> This feature is currently considered beta
You can opt-out of generating the `packages` folder by using the `storage` option:

```paket
// Do not extract into the "packages" folder but use a globally shared directory
storage: none
source https://nuget.org/api/v2
nuget jQuery
```

The storage option may be overriden by packages.
However, the behavior is undefined and may change (please open an issue if you depend on the current behavior or we break you).

### Controlling whether content files should be copied to the project

The `content` option controls the installation of any content files:
8 changes: 6 additions & 2 deletions docs/content/nuget-dependencies.md
Original file line number Diff line number Diff line change
@@ -36,14 +36,14 @@ source http://myserver/nuget/api/v2 // Custom feed.
It's also possible to provide login information for private NuGet feeds:

```paket
source http://example.com/nuget/api/v2 username: "user name" password: "the password"
source http://example.com/nuget/api/v2 username: "user name" password: "the password" authtype: "basic"
```

If you don't want to check your username and password into source control, you
can use environment variables instead:

```paket
source http://myserver/nuget/api/v2 username: "%PRIVATE_FEED_USER%" password: "%PRIVATE_FEED_PASS%"
source http://myserver/nuget/api/v2 username: "%PRIVATE_FEED_USER%" password: "%PRIVATE_FEED_PASS%" authtype: "ntlm"
```

`%PRIVATE_FEED_USER%` and `%PRIVATE_FEED_PASS%` will be expanded with the
@@ -52,6 +52,10 @@ variables.

The [`paket.lock` file](lock-file.html) will also reflect these settings.

`authtype` is an optional parameter to specify the authentication scheme. Allowed
values are `basic` and `ntlm`. If no authentication type is specified, basic
authentication will be used.

**Note:** If [`paket.dependencies` file](dependencies-file.html) exists while
running the [`convert-from-nuget` command](paket-convert-from-nuget.html), the
`PRIVATE_FEED_USER` and `PRIVATE_FEED_PASS` will *not* be expanded. Please see
4 changes: 4 additions & 0 deletions docs/content/paket-and-dotnet-cli.md
Original file line number Diff line number Diff line change
@@ -51,6 +51,10 @@ allows you to use specialized NuGet packages that provide `dotnet` CLI tools.

CLI tools are only available for .NET SDK-based projects.

> Consider setting `storage: none` in your dependencies file for the relevant groups to mirror NuGet behavior and
> not copy all dependencies to the packages folder. This will keep your repository folder small and clean.
> Please read the relevant section of the [`paket.dependencies` file](dependencies-file.html) documentation.
### Installing dependencies

Install all required packages with:
Original file line number Diff line number Diff line change
@@ -28,7 +28,8 @@ let ``#49 windsor should resolve correctly``() =

[<Test>]
let ``#51 should resolve with pessimistic strategy correctly``() =
let lockFile = update "i000051-resolve-pessimistic"
// TODO: change back to i000051-resolve-pessimistic
let lockFile = update "i000051"
lockFile.Groups.[Constants.MainDependencyGroup].Resolution.[PackageName "Castle.Windsor-log4net"].Version
|> shouldEqual (SemVer.Parse "3.2.0.1")

12 changes: 6 additions & 6 deletions src/Paket.Bootstrapper/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -4,16 +4,16 @@
[assembly: AssemblyTitleAttribute("Paket.Bootstrapper")]
[assembly: AssemblyProductAttribute("Paket")]
[assembly: AssemblyDescriptionAttribute("A dependency manager for .NET with support for NuGet packages and git repositories.")]
[assembly: AssemblyVersionAttribute("5.89.1")]
[assembly: AssemblyFileVersionAttribute("5.89.1")]
[assembly: AssemblyInformationalVersionAttribute("5.89.1")]
[assembly: AssemblyVersionAttribute("5.91.0")]
[assembly: AssemblyFileVersionAttribute("5.91.0")]
[assembly: AssemblyInformationalVersionAttribute("5.91.0")]
namespace System {
internal static class AssemblyVersionInformation {
internal const System.String AssemblyTitle = "Paket.Bootstrapper";
internal const System.String AssemblyProduct = "Paket";
internal const System.String AssemblyDescription = "A dependency manager for .NET with support for NuGet packages and git repositories.";
internal const System.String AssemblyVersion = "5.89.1";
internal const System.String AssemblyFileVersion = "5.89.1";
internal const System.String AssemblyInformationalVersion = "5.89.1";
internal const System.String AssemblyVersion = "5.91.0";
internal const System.String AssemblyFileVersion = "5.91.0";
internal const System.String AssemblyInformationalVersion = "5.91.0";
}
}
1 change: 1 addition & 0 deletions src/Paket.Core.preview3/Paket.Core.fsproj
Original file line number Diff line number Diff line change
@@ -39,6 +39,7 @@
<Compile Include="$(PaketCoreSourcesDir)\Dependencies\PackageResolver.fs" />
<Compile Include="$(PaketCoreSourcesDir)\Dependencies\Nuspec.fs" />
<Compile Include="$(PaketCoreSourcesDir)\Dependencies\NuGetCache.fs" />
<Compile Include="$(PaketCoreSourcesDir)\Dependencies\CacheExtensions.fs" />
<Compile Include="$(PaketCoreSourcesDir)\Dependencies\NuGetV3.fs" />
<Compile Include="$(PaketCoreSourcesDir)\Dependencies\NuGetV2.fs" />
<Compile Include="$(PaketCoreSourcesDir)\Dependencies\NuGetLocal.fs" />
12 changes: 6 additions & 6 deletions src/Paket.Core/AssemblyInfo.fs
Original file line number Diff line number Diff line change
@@ -6,16 +6,16 @@ open System.Reflection
[<assembly: AssemblyProductAttribute("Paket")>]
[<assembly: AssemblyCompanyAttribute("Paket team")>]
[<assembly: AssemblyDescriptionAttribute("A dependency manager for .NET with support for NuGet packages and git repositories.")>]
[<assembly: AssemblyVersionAttribute("5.89.1")>]
[<assembly: AssemblyFileVersionAttribute("5.89.1")>]
[<assembly: AssemblyInformationalVersionAttribute("5.89.1")>]
[<assembly: AssemblyVersionAttribute("5.91.0")>]
[<assembly: AssemblyFileVersionAttribute("5.91.0")>]
[<assembly: AssemblyInformationalVersionAttribute("5.91.0")>]
do ()

module internal AssemblyVersionInformation =
let [<Literal>] AssemblyTitle = "Paket.Core"
let [<Literal>] AssemblyProduct = "Paket"
let [<Literal>] AssemblyCompany = "Paket team"
let [<Literal>] AssemblyDescription = "A dependency manager for .NET with support for NuGet packages and git repositories."
let [<Literal>] AssemblyVersion = "5.89.1"
let [<Literal>] AssemblyFileVersion = "5.89.1"
let [<Literal>] AssemblyInformationalVersion = "5.89.1"
let [<Literal>] AssemblyVersion = "5.91.0"
let [<Literal>] AssemblyFileVersion = "5.91.0"
let [<Literal>] AssemblyInformationalVersion = "5.91.0"
2 changes: 1 addition & 1 deletion src/Paket.Core/Common/Constants.fs
Original file line number Diff line number Diff line change
@@ -24,7 +24,7 @@ let [<Literal>] TargetsFileName = "paket.targets"
let [<Literal>] ReferencesFile = "paket.references"
let [<Literal>] AccessLockFileName = "paket.locked"
let [<Literal>] PaketFilesFolderName = "paket-files"
let [<Literal>] PackagesFolderName = "packages"
let [<Literal>] DefaultPackagesFolderName = "packages"
let [<Literal>] SolutionFolderProjectGuid = "2150E333-8FDC-42A3-9474-1A3956D46DE8"
let [<Literal>] PaketVersionFileName = "paket.version"
let [<Literal>] TemplateFile = "paket.template"
91 changes: 76 additions & 15 deletions src/Paket.Core/Common/Utils.fs
Original file line number Diff line number Diff line change
@@ -98,10 +98,17 @@ let internal memoizeAsync f =
fun (x: 'a) -> // task.Result serialization to sync after done.
cache.GetOrAdd(x, fun x -> f(x) |> Async.StartAsTask) |> Async.AwaitTask

type AuthType = | Basic | NTLM

type Auth =
| Credentials of Username : string * Password : string
| Credentials of Username : string * Password : string * Type : AuthType
| Token of string

let internal parseAuthTypeString (str:string) =
match str.Trim().ToLowerInvariant() with
| "ntlm" -> AuthType.NTLM
| _ -> AuthType.Basic

let TimeSpanToReadableString(span:TimeSpan) =
let pluralize x = if x = 1 then String.Empty else "s"
let notZero x y = if x > 0 then y else String.Empty
@@ -148,7 +155,23 @@ let getDirectoryInfoForLocalNuGetFeed pathInfo alternativeProjectRoot root =
match alternativeProjectRoot with
| Some root -> DirectoryInfo(Path.Combine(root, s))
| None -> DirectoryInfo(Path.Combine(root, s))



// show the path that was too long
let FileInfo(str) =
try
FileInfo(str)
with
:? PathTooLongException as exn -> raise (PathTooLongException("Path too long: " + str, exn))


// show the path that was too long
let DirectoryInfo(str) =
try
DirectoryInfo(str)
with
:? PathTooLongException as exn -> raise (PathTooLongException("Path too long: " + str, exn))

/// Creates a directory if it does not exist.
let createDir path =
try
@@ -582,7 +605,7 @@ let createHttpClient (url,auth:Auth option) =
let client = new HttpClient(handler)
match auth with
| None -> handler.UseDefaultCredentials <- true
| Some(Credentials(username, password)) ->
| Some(Credentials(username, password, AuthType.Basic)) ->
// htttp://stackoverflow.com/questions/16044313/webclient-httpwebrequest-with-basic-authentication-returns-404-not-found-for-v/26016919#26016919
//this works ONLY if the server returns 401 first
//client DOES NOT send credentials on first request
@@ -593,6 +616,9 @@ let createHttpClient (url,auth:Auth option) =
let credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(username + ":" + password))
client.DefaultRequestHeaders.Authorization <-
new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials)
| Some(Credentials(username, password, AuthType.NTLM)) ->
let cred = System.Net.NetworkCredential(username,password)
handler.Credentials <- cred.GetCredential(new Uri(url), "NTLM")
| Some(Token token) ->
client.DefaultRequestHeaders.Authorization <-
new System.Net.Http.Headers.AuthenticationHeaderValue("token", token)
@@ -616,7 +642,7 @@ let createWebClient (url,auth:Auth option) =
let githubToken = Environment.GetEnvironmentVariable "PAKET_GITHUB_API_TOKEN"

match auth with
| Some (Credentials(username, password)) ->
| Some (Credentials(username, password, AuthType.Basic)) ->
// htttp://stackoverflow.com/questions/16044313/webclient-httpwebrequest-with-basic-authentication-returns-404-not-found-for-v/26016919#26016919
//this works ONLY if the server returns 401 first
//client DOES NOT send credentials on first request
@@ -627,6 +653,9 @@ let createWebClient (url,auth:Auth option) =
let credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(username + ":" + password))
client.Headers.[HttpRequestHeader.Authorization] <- sprintf "Basic %s" credentials
client.Credentials <- new NetworkCredential(username,password)
| Some (Credentials(username, password, AuthType.NTLM)) ->
let cred = NetworkCredential(username,password)
client.Credentials <- cred.GetCredential(new Uri(url), "NTLM")
| Some (Token token) ->
client.Headers.[HttpRequestHeader.Authorization] <- sprintf "token %s" token
| None when not (isNull githubToken) ->
@@ -773,20 +802,52 @@ let inline windowsPath (path:string) = path.Replace(Path.DirectorySeparatorChar,
/// Gets all files with the given pattern
let inline FindAllFiles(folder, pattern) = DirectoryInfo(folder).GetFiles(pattern, SearchOption.AllDirectories)

let getTargetFolder root groupName (packageName:PackageName) version includeVersionInPath =
let packageFolder = string packageName + if includeVersionInPath then "." + string version else ""
if groupName = Constants.MainDependencyGroup then
Path.Combine(root, Constants.PackagesFolderName, packageFolder)
else
Path.Combine(root, Constants.PackagesFolderName, groupName.CompareString, packageFolder)

type ResolvedPackagesFolder =
/// No "packages" folder for the current package
| NoPackagesFolder
/// the /packages/group/ExtractedPackage.X.Y.Z folder
| ResolvedFolder of string
member x.Path =
match x with
| NoPackagesFolder -> None
| ResolvedFolder f -> Some f

type PackagesFolderGroupConfig =
| NoPackagesFolder
| GivenPackagesFolder of string
| DefaultPackagesFolder
member x.ResolveGroupDir root groupName =
match x with
| NoPackagesFolder -> None
| GivenPackagesFolder p ->
// relative to root
Some p
| DefaultPackagesFolder ->
let groupDir =
if groupName = Constants.MainDependencyGroup then
Path.Combine(root, Constants.DefaultPackagesFolderName)
else
Path.Combine(root, Constants.DefaultPackagesFolderName, groupName.CompareString)
Some groupDir
member x.Resolve root groupName (packageName:PackageName) version includeVersionInPath =
match x with
| NoPackagesFolder -> ResolvedPackagesFolder.NoPackagesFolder
| GivenPackagesFolder p ->
// relative to root
ResolvedPackagesFolder.ResolvedFolder p
| DefaultPackagesFolder ->
let groupDir = x.ResolveGroupDir root groupName |> Option.get
let packageFolder = string packageName + if includeVersionInPath then "." + string version else ""
let parent = Path.Combine(groupDir, packageFolder)
ResolvedPackagesFolder.ResolvedFolder parent
static member Default = DefaultPackagesFolder
let RunInLockedAccessMode(rootFolder,action) =
let packagesFolder = Path.Combine(rootFolder,Constants.PackagesFolderName)
if Directory.Exists packagesFolder |> not then
Directory.CreateDirectory packagesFolder |> ignore
let paketFilesFolder = Path.Combine(rootFolder,Constants.PaketFilesFolderName)
if Directory.Exists paketFilesFolder |> not then
Directory.CreateDirectory paketFilesFolder |> ignore

let p = System.Diagnostics.Process.GetCurrentProcess()
let fileName = Path.Combine(packagesFolder,Constants.AccessLockFileName)
let fileName = Path.Combine(paketFilesFolder,Constants.AccessLockFileName)

// Checks the packagesFolder for a paket.locked file or waits until it get access to it.
let rec acquireLock (startTime:DateTime) (timeOut:TimeSpan) trials =
Loading