perf: lake: lazily acquire repo URL/tag in :release
This commit is contained in:
parent
2f51d5af49
commit
decf7a042a
4 changed files with 10 additions and 22 deletions
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue