Skip to content

Commit

Permalink
Do not parse remote dependencies file twice - references #1101
Browse files Browse the repository at this point in the history
  • Loading branch information
forki committed Oct 1, 2015
1 parent 19310ee commit b2dfa7b
Show file tree
Hide file tree
Showing 8 changed files with 22 additions and 22 deletions.
3 changes: 3 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#### 2.5.6 - 01.10.2015
* PERFORMANCE: Do not parse remote dependencies file twice - https://github.com/fsprojects/Paket/issues/1101

#### 2.5.5 - 01.10.2015
* PERFORMANCE: Check if we already downloaded paket.dependencies file for remote files in order to reduce stress on API limit - https://github.com/fsprojects/Paket/issues/1101

Expand Down
12 changes: 2 additions & 10 deletions src/Paket.Core/DependenciesFile.fs
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ type DependenciesFile(fileName,groups:Map<GroupName,DependenciesGroup>, textRepr
member __.FileName = fileName
member __.Lines = textRepresentation

member __.Resolve(getSha1,getVersionF, getPackageDetailsF,groupsToResolve:Map<GroupName,RequirementsGroup>) =
member __.Resolve(force, getSha1, getVersionF, getPackageDetailsF, groupsToResolve:Map<GroupName,RequirementsGroup>) =
groupsToResolve
|> Map.map (fun k group ->
let rootDependencies =
Expand All @@ -415,16 +415,8 @@ type DependenciesFile(fileName,groups:Map<GroupName,DependenciesGroup>, textRepr
| Some d -> d

let resolveSourceFile (file:ResolvedSourceFile) : PackageRequirement list =
let parserF text =
try
DependenciesFile.FromCode(text) |> ignore
true
with
| _ -> false

RemoteDownload.downloadDependenciesFile(Path.GetDirectoryName fileName, group.Name, parserF, file)
RemoteDownload.downloadDependenciesFile(force,Path.GetDirectoryName fileName, group.Name, DependenciesFile.FromCode, file)
|> Async.RunSynchronously
|> DependenciesFile.FromCode
|> fun df -> df.Groups.[Constants.MainDependencyGroup].Packages // We do not support groups in reference files yet

let remoteFiles = ModuleResolver.Resolve(resolveSourceFile,getSha1,group.RemoteFiles)
Expand Down
2 changes: 1 addition & 1 deletion src/Paket.Core/FindOutdated.fs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ let FindOutdated strict includingPrereleases environment = trial {
FrameworkRestrictions = group.Options.Settings.FrameworkRestrictions
PackageRequirements = [] })

let newResolution = dependenciesFile.Resolve(getSha1,(fun (x,y,_) -> NuGetV2.GetVersions root (x,y)),NuGetV2.GetPackageDetails root true,groups)
let newResolution = dependenciesFile.Resolve(true,getSha1,(fun (x,y,_) -> NuGetV2.GetVersions root (x,y)),NuGetV2.GetPackageDetails root true,groups)

let changed =
[for kv in lockFile.Groups do
Expand Down
19 changes: 12 additions & 7 deletions src/Paket.Core/RemoteDownload.fs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ let private rawGistFileUrl owner project fileName =
sprintf "https://gist.githubusercontent.com/%s/%s/raw/%s" owner project fileName

/// Gets a dependencies file from the remote source and tries to parse it.
let downloadDependenciesFile(rootPath,groupName,parserF,remoteFile:ModuleResolver.ResolvedSourceFile) = async {
let downloadDependenciesFile(force,rootPath,groupName,parserF,remoteFile:ModuleResolver.ResolvedSourceFile) = async {
let fi = FileInfo(remoteFile.Name)

let dependenciesFileName = remoteFile.Name.Replace(fi.Name,Constants.DependenciesFileName)
Expand All @@ -78,26 +78,31 @@ let downloadDependenciesFile(rootPath,groupName,parserF,remoteFile:ModuleResolve
let exists =
let di = destination.Directory
let versionFile = FileInfo(Path.Combine(di.FullName, Constants.PaketVersionFileName))
not (String.IsNullOrWhiteSpace remoteFile.Commit) &&
not force &&
not (String.IsNullOrWhiteSpace remoteFile.Commit) &&
destination.Exists &&
versionFile.Exists &&
File.ReadAllText(versionFile.FullName).Contains(remoteFile.Commit)


if exists then
return File.ReadAllText(destination.FullName)
return parserF (File.ReadAllText(destination.FullName))
else
let! result = lookupDocument(auth,url)

let text =
let text,depsFile =
match result with
| Some text when parserF text -> text
| _ -> ""
| Some text ->
try
text,parserF text
with
| _ -> "",parserF ""
| _ -> "",parserF ""

Directory.CreateDirectory(destination.FullName |> Path.GetDirectoryName) |> ignore
File.WriteAllText(destination.FullName, text)

return text }
return depsFile }


let ExtractZip(fileName : string, targetFolder) =
Expand Down
2 changes: 1 addition & 1 deletion src/Paket.Core/UpdateProcess.fs
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ let SelectiveUpdate(dependenciesFile : DependenciesFile, updateAll, exclude, for
let getSha1 origin owner repo branch = RemoteDownload.getSHA1OfBranch origin owner repo branch |> Async.RunSynchronously
let root = Path.GetDirectoryName dependenciesFile.FileName

let lockFile = selectiveUpdate (fun d g -> d.Resolve(getSha1,(fun (x,y,_) -> NuGetV2.GetVersions root (x,y)) |> getVersion,NuGetV2.GetPackageDetails root force,g)) oldLockFile dependenciesFile updateAll exclude
let lockFile = selectiveUpdate (fun d g -> d.Resolve(force, getSha1,(fun (x,y,_) -> NuGetV2.GetVersions root (x,y)) |> getVersion,NuGetV2.GetPackageDetails root force,g)) oldLockFile dependenciesFile updateAll exclude
lockFile.Save()
lockFile

Expand Down
2 changes: 1 addition & 1 deletion src/Paket/Paket.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
<StartAction>Project</StartAction>
<StartProgram>paket.exe</StartProgram>
<StartWorkingDirectory>c:\code\Paketkopie</StartWorkingDirectory>
<StartWorkingDirectory>d:\code\PaketRepro</StartWorkingDirectory>
<StartWorkingDirectory>d:\code\PaketKopie</StartWorkingDirectory>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
Expand Down
2 changes: 1 addition & 1 deletion tests/Paket.Tests/TestHelpers.fs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ let ResolveWithGraph(dependenciesFile:DependenciesFile,getSha1,getVersionF, getP

let groups = [Constants.MainDependencyGroup, mainGroup ] |> Map.ofSeq

dependenciesFile.Resolve(getSha1,getVersionF,getPackageDetailsF,groups)
dependenciesFile.Resolve(true,getSha1,getVersionF,getPackageDetailsF,groups)

let getVersion (resolved:ResolvedPackage) = resolved.Version.ToString()

Expand Down
2 changes: 1 addition & 1 deletion tests/Paket.Tests/UpdateProcessSpecs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ let graph =
let getLockFile lockFileData = LockFile.Parse("",toLines lockFileData)
let lockFile = lockFileData |> getLockFile
let resolve' graph (dependenciesFile : DependenciesFile) groups =
dependenciesFile.Resolve(noSha1, VersionsFromGraph graph, PackageDetailsFromGraph graph, groups)
dependenciesFile.Resolve(true,noSha1, VersionsFromGraph graph, PackageDetailsFromGraph graph, groups)

let resolve = resolve' graph

Expand Down

0 comments on commit b2dfa7b

Please sign in to comment.