From 8e48630376e9094d3495ef0a71785d034476c4e7 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Thu, 3 Dec 2020 23:04:09 +0100 Subject: [PATCH 1/2] onLoad now runs with correct FileTreeRepository and CacheStoreFactory --- main/src/main/scala/sbt/Main.scala | 12 ++++++++---- main/src/main/scala/sbt/Project.scala | 12 ++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index f2e7a2e9e..a2d96df0f 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -940,13 +940,17 @@ object BuiltinCommands { val session = Load.initialSession(structure, eval, s0) SessionSettings.checkSession(session, s2) - val s3 = addCacheStoreFactoryFactory(Project.setProject(session, structure, s2)) + val s3 = Project.setProject( + session, + structure, + s2, + st => setupGlobalFileTreeRepository(addCacheStoreFactoryFactory(st)) + ) val s4 = s3.put(Keys.useLog4J.key, Project.extract(s3).get(Keys.useLog4J)) - val s5 = setupGlobalFileTreeRepository(s4) // This is a workaround for the console task in dotty which uses the classloader cache. // We need to override the top loader in that case so that it gets the forked jline. - s5.extendedClassLoaderCache.setParent(Project.extract(s5).get(Keys.scalaInstanceTopLoader)) - addSuperShellParams(CheckBuildSources.init(LintUnused.lintUnusedFunc(s5))) + s4.extendedClassLoaderCache.setParent(Project.extract(s4).get(Keys.scalaInstanceTopLoader)) + addSuperShellParams(CheckBuildSources.init(LintUnused.lintUnusedFunc(s4))) } private val setupGlobalFileTreeRepository: State => State = { state => diff --git a/main/src/main/scala/sbt/Project.scala b/main/src/main/scala/sbt/Project.scala index b44dea4ff..d4c863ba6 100755 --- a/main/src/main/scala/sbt/Project.scala +++ b/main/src/main/scala/sbt/Project.scala @@ -479,7 +479,15 @@ object Project extends ProjectExtra { previousOnUnload(s.runExitHooks()) } - def setProject(session: SessionSettings, structure: BuildStructure, s: State): State = { + def setProject(session: SessionSettings, structure: BuildStructure, s: State): State = + setProject(session, structure, s, st => st) + + def setProject( + session: SessionSettings, + structure: BuildStructure, + s: State, + preOnLoad: State => State + ): State = { val unloaded = runUnloadHooks(s) val (onLoad, onUnload) = getHooks(structure.data) val newAttrs = unloaded.attributes @@ -489,7 +497,7 @@ object Project extends ProjectExtra { val newState = unloaded.copy(attributes = newAttrs) // TODO: Fix this onLoad( - updateCurrent(newState) /*LogManager.setGlobalLogLevels(updateCurrent(newState), structure.data)*/ + preOnLoad(updateCurrent(newState)) /*LogManager.setGlobalLogLevels(updateCurrent(newState), structure.data)*/ ) } From 0dc762296909792f174fce59f65dcb9e232c577a Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Fri, 4 Dec 2020 00:36:48 +0100 Subject: [PATCH 2/2] Use identity --- main/src/main/scala/sbt/Project.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Project.scala b/main/src/main/scala/sbt/Project.scala index d4c863ba6..d7e653127 100755 --- a/main/src/main/scala/sbt/Project.scala +++ b/main/src/main/scala/sbt/Project.scala @@ -480,7 +480,7 @@ object Project extends ProjectExtra { } def setProject(session: SessionSettings, structure: BuildStructure, s: State): State = - setProject(session, structure, s, st => st) + setProject(session, structure, s, identity) def setProject( session: SessionSettings,