From 5e3a5b7751a33358b5217eadc0421dbe7e2af714 Mon Sep 17 00:00:00 2001 From: Jaroslav Tulach Date: Wed, 3 Jul 2024 07:33:01 +0200 Subject: [PATCH] Disable UpdatingEditionProvider when running Enso CLI (#10408) --- .../enso/languageserver/boot/MainModule.scala | 6 +++- .../websocket/json/BaseServerTest.scala | 3 +- .../enso/runner/DependencyPreinstaller.scala | 3 +- .../editions/updater/EditionManager.scala | 34 ++++++++++++------- .../updater/UpdatingEditionProvider.scala | 6 +--- .../editions/provider/EditionProvider.scala | 2 +- .../provider/FileSystemEditionProvider.scala | 4 ++- .../enso/editions/EditionResolverSpec.scala | 3 +- 8 files changed, 38 insertions(+), 23 deletions(-) diff --git a/engine/language-server/src/main/scala/org/enso/languageserver/boot/MainModule.scala b/engine/language-server/src/main/scala/org/enso/languageserver/boot/MainModule.scala index cb1b298228..441e646148 100644 --- a/engine/language-server/src/main/scala/org/enso/languageserver/boot/MainModule.scala +++ b/engine/language-server/src/main/scala/org/enso/languageserver/boot/MainModule.scala @@ -158,7 +158,11 @@ class MainModule(serverConfig: LanguageServerConfig, logLevel: Level) { val distributionManager = new DistributionManager(environment) val editionProvider = - EditionManager.makeEditionProvider(distributionManager, Some(languageHome)) + EditionManager.makeEditionProvider( + distributionManager, + Some(languageHome), + false + ) val editionResolver = EditionResolver(editionProvider) val editionReferenceResolver = new EditionReferenceResolver( contentRoot.file, diff --git a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/BaseServerTest.scala b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/BaseServerTest.scala index 8d6838c5e2..2a88021513 100644 --- a/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/BaseServerTest.scala +++ b/engine/language-server/src/test/scala/org/enso/languageserver/websocket/json/BaseServerTest.scala @@ -347,7 +347,8 @@ abstract class BaseServerTest val editionProvider = EditionManager.makeEditionProvider( distributionManager, - Some(languageHome) + Some(languageHome), + true ) val editionResolver = EditionResolver(editionProvider) val editionReferenceResolver = new EditionReferenceResolver( diff --git a/engine/runner/src/main/scala/org/enso/runner/DependencyPreinstaller.scala b/engine/runner/src/main/scala/org/enso/runner/DependencyPreinstaller.scala index f99b954afa..f42b2c5413 100644 --- a/engine/runner/src/main/scala/org/enso/runner/DependencyPreinstaller.scala +++ b/engine/runner/src/main/scala/org/enso/runner/DependencyPreinstaller.scala @@ -43,7 +43,8 @@ object DependencyPreinstaller { val editionProvider = EditionManager.makeEditionProvider( distributionManager, - Some(languageHome) + Some(languageHome), + true ) val editionResolver = EditionResolver(editionProvider) val edition = editionResolver diff --git a/lib/scala/edition-updater/src/main/scala/org/enso/editions/updater/EditionManager.scala b/lib/scala/edition-updater/src/main/scala/org/enso/editions/updater/EditionManager.scala index f4fccc1ad5..ce82bca919 100644 --- a/lib/scala/edition-updater/src/main/scala/org/enso/editions/updater/EditionManager.scala +++ b/lib/scala/edition-updater/src/main/scala/org/enso/editions/updater/EditionManager.scala @@ -10,7 +10,9 @@ import java.nio.file.Path import scala.util.Try /** A helper class for resolving editions. */ -class EditionManager private (editionProvider: UpdatingEditionProvider) { +class EditionManager private ( + editionProvider: editions.provider.EditionProvider +) { private val editionResolver = EditionResolver(editionProvider) private val engineVersionResolver = editions.EngineVersionResolver(editionProvider) @@ -46,18 +48,26 @@ class EditionManager private (editionProvider: UpdatingEditionProvider) { object EditionManager { /** Create an [[EditionProvider]] that can locate editions from the - * distribution and the language home. + * distribution (if updating) and the language home. */ - def makeEditionProvider( + final def makeEditionProvider( distributionManager: DistributionManager, - languageHome: Option[LanguageHome] - ): UpdatingEditionProvider = { - val config = new GlobalConfigurationManager(distributionManager).getConfig - new UpdatingEditionProvider( - getSearchPaths(distributionManager, languageHome), - distributionManager.paths.cachedEditions, - config.editionProviders - ) + languageHome: Option[LanguageHome], + updating: Boolean + ): editions.provider.EditionProvider = { + val config = new GlobalConfigurationManager(distributionManager).getConfig + val searchPaths = getSearchPaths(distributionManager, languageHome) + val cachePath = distributionManager.paths.cachedEditions + if (updating) { + new UpdatingEditionProvider( + searchPaths, + cachePath, + config.editionProviders + ) + } else { + val actualSearchPaths = (searchPaths ++ List(cachePath)).distinct + new editions.provider.FileSystemEditionProvider(actualSearchPaths) + } } /** Get search paths associated with the distribution and language home. */ @@ -77,6 +87,6 @@ object EditionManager { distributionManager: DistributionManager, languageHome: Option[LanguageHome] = None ): EditionManager = new EditionManager( - makeEditionProvider(distributionManager, languageHome) + makeEditionProvider(distributionManager, languageHome, false) ) } diff --git a/lib/scala/edition-updater/src/main/scala/org/enso/editions/updater/UpdatingEditionProvider.scala b/lib/scala/edition-updater/src/main/scala/org/enso/editions/updater/UpdatingEditionProvider.scala index e7e9a2856a..62e33c6993 100644 --- a/lib/scala/edition-updater/src/main/scala/org/enso/editions/updater/UpdatingEditionProvider.scala +++ b/lib/scala/edition-updater/src/main/scala/org/enso/editions/updater/UpdatingEditionProvider.scala @@ -38,12 +38,8 @@ class UpdatingEditionProvider( case Right(value) => Right(value) } - /** Finds all editions available on the [[searchPaths]]. */ - override def findAvailableEditions(): Seq[String] = - provider.findAvailableEditions() - /** Finds all available editions, performing an update if asked to. */ - def findAvailableEditions(update: Boolean): Seq[String] = { + override def findAvailableEditions(update: Boolean): Seq[String] = { if (update) { updater.updateEditions() } diff --git a/lib/scala/editions/src/main/scala/org/enso/editions/provider/EditionProvider.scala b/lib/scala/editions/src/main/scala/org/enso/editions/provider/EditionProvider.scala index 42ae8a156c..b307bd96af 100644 --- a/lib/scala/editions/src/main/scala/org/enso/editions/provider/EditionProvider.scala +++ b/lib/scala/editions/src/main/scala/org/enso/editions/provider/EditionProvider.scala @@ -15,5 +15,5 @@ trait EditionProvider { ): Either[EditionLoadingError, Editions.Raw.Edition] /** Finds all editions that are currently available. */ - def findAvailableEditions(): Seq[String] + def findAvailableEditions(update: Boolean = false): Seq[String] } diff --git a/lib/scala/editions/src/main/scala/org/enso/editions/provider/FileSystemEditionProvider.scala b/lib/scala/editions/src/main/scala/org/enso/editions/provider/FileSystemEditionProvider.scala index dce23a1a17..d9d502ec35 100644 --- a/lib/scala/editions/src/main/scala/org/enso/editions/provider/FileSystemEditionProvider.scala +++ b/lib/scala/editions/src/main/scala/org/enso/editions/provider/FileSystemEditionProvider.scala @@ -51,7 +51,9 @@ class FileSystemEditionProvider(searchPaths: List[Path]) } /** Finds all editions available on the [[searchPaths]]. */ - override def findAvailableEditions(): Seq[String] = + override def findAvailableEditions( + ignoreUpdateRequest: Boolean + ): Seq[String] = searchPaths.flatMap(findEditionsAt).distinct private def findEditionName(path: Path): Option[String] = diff --git a/lib/scala/editions/src/test/scala/org/enso/editions/EditionResolverSpec.scala b/lib/scala/editions/src/test/scala/org/enso/editions/EditionResolverSpec.scala index 210dc84764..b0187a3e24 100644 --- a/lib/scala/editions/src/test/scala/org/enso/editions/EditionResolverSpec.scala +++ b/lib/scala/editions/src/test/scala/org/enso/editions/EditionResolverSpec.scala @@ -54,7 +54,8 @@ class EditionResolverSpec ): Either[EditionLoadingError, Editions.Raw.Edition] = editions.get(name).toRight(EditionNotFound(name)) - override def findAvailableEditions(): Seq[String] = editions.keys.toSeq + override def findAvailableEditions(update: Boolean): Seq[String] = + editions.keys.toSeq } val resolver = EditionResolver(FakeEditionProvider)