perf: lake: lazily acquire repo URL/tag in :release

This commit is contained in:
tydeu 2023-09-25 16:02:20 -04:00 committed by Mac Malone
parent 2f51d5af49
commit decf7a042a
4 changed files with 10 additions and 22 deletions

View file

@ -3,6 +3,7 @@ Copyright (c) 2022 Mac Malone. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mac Malone
-/
import Lake.Util.Git
import Lake.Util.Sugar
import Lake.Build.Common
import Lake.Build.Targets
@ -46,8 +47,15 @@ def Package.extraDepFacetConfig : PackageFacetConfig extraDepFacet :=
/-- Download and unpack the package's prebuilt release archive (from GitHub). -/
def Package.fetchRelease (self : Package) : SchedulerM (BuildJob Unit) := Job.async do
let some (repoUrl, tag) := self.release? | do
logWarning "wanted prebuilt release, but release repository and tag was not known"
let repo := GitRepo.mk self.dir
let repoUrl? := self.releaseRepo? <|> self.remoteUrl?
let some repoUrl := repoUrl? <|> (← repo.getFilteredRemoteUrl?) | do
logWarning <| s!"{self.name}: wanted prebuilt release, " ++
"but package's repository URL was not known; it may need to set `releaseRepo?`"
return ((), .nil)
let some tag ← repo.findTag? | do
logWarning <| s!"{self.name}: wanted prebuilt release, " ++
"but could not find an associated tag for the package's revision"
return ((), .nil)
let url := s!"{repoUrl}/releases/download/{tag}/{self.buildArchive}"
let logName := s!"{self.name}/{tag}/{self.buildArchive}"

View file

@ -183,8 +183,6 @@ structure Package where
leanOpts : Options
/-- The URL to this package's Git remote. -/
remoteUrl? : Option String := none
/-- The Git tag of this package. -/
gitTag? : Option String := none
/-- (Opaque references to) the package's direct dependencies. -/
opaqueDeps : Array OpaquePackage := #[]
/-- Lean library configurations for the package. -/
@ -269,15 +267,6 @@ namespace Package
@[inline] def releaseRepo? (self : Package) : Option String :=
self.config.releaseRepo?
/--
The package's URL × tag release.
Tries `releaseRepo?` first and then falls back to `remoteUrl?`.
-/
def release? (self : Package) : Option (String × String) := do
let url ← self.releaseRepo? <|> self.remoteUrl?
let tag ← self.gitTag?
return (url, tag)
/-- The package's `buildArchive?` configuration. -/
@[inline] def buildArchive? (self : Package) : Option String :=
self.config.buildArchive?

View file

@ -38,7 +38,6 @@ def loadDepPackage (wsDir : FilePath) (dep : MaterializedDep)
return {
dir, config, configEnv, leanOpts
remoteUrl? := dep.remoteUrl?
gitTag? := dep.gitTag?
}
/--
@ -103,12 +102,9 @@ def loadWorkspaceRoot (config : LoadConfig) : LogIO Workspace := do
let configEnv ← importConfigFile config.rootDir config.rootDir
config.configOpts config.leanOpts config.configFile config.reconfigure
let pkgConfig ← IO.ofExcept <| PackageConfig.loadFromEnv configEnv config.leanOpts
let repo := GitRepo.mk config.rootDir
let root := {
configEnv, leanOpts := config.leanOpts
dir := config.rootDir, config := pkgConfig
remoteUrl? := ← repo.getFilteredRemoteUrl?
gitTag? := ← repo.findTag?
}
return {
root, lakeEnv := config.env

View file

@ -74,7 +74,6 @@ structure MaterializedDep where
/-- Path to the materialized package relative to the workspace's root directory. -/
relPkgDir : FilePath
remoteUrl? : Option String
gitTag? : Option String
manifestEntry : PackageEntry
deriving Inhabited
@ -96,7 +95,6 @@ def Dependency.materialize (dep : Dependency) (inherited : Bool)
return {
relPkgDir
remoteUrl? := none
gitTag? := ← (GitRepo.mk <| wsDir / relPkgDir).findTag?
manifestEntry := .path dep.name dep.opts inherited relPkgDir
}
| .git url inputRev? subDir? => do
@ -109,7 +107,6 @@ def Dependency.materialize (dep : Dependency) (inherited : Bool)
return {
relPkgDir
remoteUrl? := Git.filterUrl? url
gitTag? := ← repo.findTag?
manifestEntry := .git dep.name dep.opts inherited url rev inputRev? subDir?
}
@ -121,7 +118,6 @@ def PackageEntry.materialize (wsDir relPkgsDir : FilePath) (manifestEntry : Pack
return {
relPkgDir
remoteUrl? := none
gitTag? := ← (GitRepo.mk <| wsDir / relPkgDir).findTag?
manifestEntry
}
| .git name _opts _inherited url rev _inputRev? subDir? => do
@ -147,6 +143,5 @@ def PackageEntry.materialize (wsDir relPkgsDir : FilePath) (manifestEntry : Pack
return {
relPkgDir
remoteUrl? := Git.filterUrl? url
gitTag? := ← repo.findTag?
manifestEntry
}