Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
cleanup
  • Loading branch information
theimowski committed Jan 8, 2015
commit d18a58270dabcce230dfbfb03ac71c05a9a2e858
7 changes: 7 additions & 0 deletions src/Paket.Core/Domain.fs
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,10 @@ type DomainMessage =
sprintf "Dependency %s from %s not found in lock file." name Constants.DependenciesFileName
| ReferenceNotFoundInLockFile(path, PackageName name) ->
sprintf "Reference %s from %s not found in lock file." name path

| DownloadError url ->
sprintf "Error occured while downloading from %s." url
| ReleasesJsonParseError ->
"Unable to parse Json from GitHub releases API."
| FileDeleteError path ->
sprintf "Unable to delete file %s." path
5 changes: 2 additions & 3 deletions src/Paket.Core/Environment.fs
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ type PaketEnv = {

[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module PaketEnv =

let create root dependenciesFile lockFile projects =
{ RootDirectory = root
DependenciesFile = dependenciesFile
LockFile = lockFile
Projects = projects }
Projects = projects }

let fromRootDirectory (directory : DirectoryInfo) = rop {
if not directory.Exists then
Expand Down Expand Up @@ -61,7 +61,6 @@ module PaketEnv =
|> Seq.tryFind File.Exists
|> Option.map (fun f -> DirectoryInfo(Path.GetDirectoryName(f)))


let ensureNotExists (directory : DirectoryInfo) =
match fromRootDirectory directory with
| Success(_) -> fail (PaketEnvAlreadyExistsInDirectory directory)
Expand Down
5 changes: 2 additions & 3 deletions src/Paket.Core/NugetConvert.fs
Original file line number Diff line number Diff line change
Expand Up @@ -349,9 +349,8 @@ let replaceNugetWithPaket initAutoRestore installAfter result =
result.NugetEnv.NugetConfig.PackageRestoreAutomatic &&
result.NugetEnv.NugetConfig.PackageRestoreEnabled

let dependenciesFileName = result.PaketEnv.DependenciesFile.FileName
if initAutoRestore && (autoVSPackageRestore || result.NugetEnv.NugetTargets.IsSome) then
VSIntegration.InitAutoRestore dependenciesFileName
VSIntegration.InitAutoRestore result.PaketEnv |> returnOrFail

if installAfter then
UpdateProcess.Update(dependenciesFileName,true,true,true)
UpdateProcess.Update(result.PaketEnv.DependenciesFile.FileName,true,true,true)
16 changes: 1 addition & 15 deletions src/Paket.Core/PublicAPI.fs
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,6 @@ type Dependencies(dependenciesFileName: string) =
fun () -> PaketEnv.init currentDirectory
)

/// Pulls new paket.targets and bootstrapper and puts them into .paket folder.
static member InitAutoRestore(): unit =
rop {
let currentDir = DirectoryInfo(Environment.CurrentDirectory)
let! rootDir =
PaketEnv.locatePaketRootDirectory(currentDir)
|> failIfNone (DependenciesFileNotFoundInDir currentDir)

return! Utils.RunInLockedAccessMode(
rootDir.FullName,
fun () -> VSIntegration.InitAutoRestoreR(rootDir)
)
} |> returnOrFail

/// Converts the solution from NuGet to Paket.
static member ConvertFromNuget(force: bool,installAfter: bool,initAutoRestore: bool,credsMigrationMode: string option) : unit =
let currentDirectory = DirectoryInfo(Environment.CurrentDirectory)
Expand Down Expand Up @@ -174,7 +160,7 @@ type Dependencies(dependenciesFileName: string) =
member this.InitAutoRestore(): unit =
Utils.RunInLockedAccessMode(
this.RootPath,
fun () -> VSIntegration.InitAutoRestore(dependenciesFileName))
fun () -> VSIntegration.InitAutoRestore |> this.Process)

/// Returns the installed version of the given package.
member this.GetInstalledVersion(packageName: string): string option =
Expand Down
23 changes: 22 additions & 1 deletion src/Paket.Core/Utils.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ open System.Net
open System.Xml
open System.Text
open Paket.Logging
open Paket.Rop
open Paket.Domain

type Auth =
{ Username : string
Expand Down Expand Up @@ -245,4 +247,23 @@ module String =
let inline orElse v =
function
| Some x -> Some x
| None -> v
| None -> v

let downloadStringSync (url : string) (client : System.Net.WebClient) =
try
client.DownloadString url |> succeed
with _ ->
DownloadError url |> fail

let downloadFileSync (url : string) (fileName : string) (client : System.Net.WebClient) =
tracefn "Downloading file from %s to %s" url fileName
try
client.DownloadFile(url, fileName) |> succeed
with _ ->
DownloadError url |> fail

let deleteFile (fileName : string) =
try
File.Delete fileName |> succeed
with _ ->
FileDeleteError fileName |> fail
73 changes: 9 additions & 64 deletions src/Paket.Core/VSIntegration.fs
Original file line number Diff line number Diff line change
Expand Up @@ -6,48 +6,31 @@ open System
open Rop
open Domain

let downloadString (url : string) (client : System.Net.WebClient) =
try
client.DownloadString url |> succeed
with _ ->
DownloadError url |> fail

let downloadFile (url : string) (fileName : string) (client : System.Net.WebClient) =
try
client.DownloadFile(url, fileName) |> succeed
with _ ->
DownloadError url |> fail

let deleteFile (fileName : string) =
try
File.Delete fileName |> succeed
with _ ->
FileDeleteError fileName |> fail

let getLatestVersionFromJson (data : string) =
try
let start = data.IndexOf("tag_name") + 11
let end' = data.IndexOf("\"", start)
succeed (data.Substring(start, end' - start))
(data.Substring(start, end' - start)) |> SemVer.Parse |> succeed
with _ ->
fail ReleasesJsonParseError

let InitAutoRestoreR(rootDirectory : DirectoryInfo) =
let exeDir = Path.Combine(rootDirectory.FullName, ".paket")
let InitAutoRestore environment =
let exeDir = Path.Combine(environment.RootDirectory.FullName, ".paket")
CreateDir(exeDir)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one can also fail due to permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Btw. I don't like to have this one explicitly called, for me it should be part of download function.
No one needs this directory to be present besides the download, as it would fail.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for comments, i'll apply changes

use client = createWebClient None

let download version file =
rop {
let fileName = Path.Combine(exeDir, file)
do! deleteFile fileName
let url = sprintf "https://github.com/fsprojects/Paket/releases/download/%s/%s" version file
do! downloadFile url fileName client
let url = sprintf "https://github.com/fsprojects/Paket/releases/download/%s/%s" (string version) file
do! downloadFileSync url fileName client
}

rop {
let releasesUrl = "https://api.github.com/repos/fsprojects/Paket/releases";
let! data = client |> downloadString releasesUrl
let! data = client |> downloadStringSync releasesUrl
let! latestVersion = getLatestVersionFromJson data

let! downloads =
Expand All @@ -56,52 +39,14 @@ let InitAutoRestoreR(rootDirectory : DirectoryInfo) =
|> collect

let projectsUnderPaket =

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aren't the projects already in environment?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good spot! I totally forgot about it

ProjectFile.FindAllProjects rootDirectory.FullName
ProjectFile.FindAllProjects environment.RootDirectory.FullName
|> Array.filter (fun project -> ProjectFile.FindReferencesFile(FileInfo(project.FileName)).IsSome)

projectsUnderPaket
|> Array.iter (fun project ->
let relativePath =
createRelativePath project.FileName (Path.Combine(root, ".paket", "paket.targets"))
createRelativePath project.FileName (Path.Combine(exeDir, "paket.targets"))
project.AddImportForPaketTargets(relativePath)
project.Save()
)

return ()
}

let InitAutoRestore(dependenciesFileName) =
let root =
if dependenciesFileName = Constants.DependenciesFileName then
"."
else
Path.GetDirectoryName dependenciesFileName

CreateDir(Path.Combine(root,".paket"))
use client = createWebClient None

let releasesUrl = "https://api.github.com/repos/fsprojects/Paket/releases";
let data = client.DownloadString(releasesUrl)
let start = data.IndexOf("tag_name") + 11
let end' = data.IndexOf("\"", start)
let latestVersion = data.Substring(start, end' - start);

for file in ["paket.targets"; "paket.bootstrapper.exe"] do
try
File.Delete(Path.Combine(root, ".paket", file))
with _ -> traceErrorfn "Unable to delete %s" file
try
client.DownloadFile(sprintf "https://github.com/fsprojects/Paket/releases/download/%s/%s" latestVersion file,
Path.Combine(root, ".paket", file))
tracefn "Downloaded %s" file
with _ -> traceErrorfn "Unable to download %s for version %s" file latestVersion

let projectsUnderPaket =
ProjectFile.FindAllProjects root
|> Array.filter (fun project -> ProjectFile.FindReferencesFile(FileInfo(project.FileName)).IsSome)

for project in projectsUnderPaket do
let relativePath =
createRelativePath project.FileName (Path.Combine(root, ".paket", "paket.targets"))
project.AddImportForPaketTargets(relativePath)
project.Save()
}