mirror of
https://github.com/sbt/sbt.git
synced 2026-08-22 14:17:13 +02:00
more consistent configuration of the Ivy user directory
This commit is contained in:
@@ -42,10 +42,10 @@ class ConfigurationParser extends NotNull
|
||||
val (boot, m4) = processSection(m3, "boot", getBoot)
|
||||
val (logging, m5) = processSection(m4, "log", getLogging)
|
||||
val (properties, m6) = processSection(m5, "app-properties", getAppProperties)
|
||||
val (cacheDir, m7) = processSection(m6, "ivy", getIvy)
|
||||
val (ivyHome, m7) = processSection(m6, "ivy", getIvy)
|
||||
check(m7, "section")
|
||||
val classifiers = Classifiers(scalaClassifiers, appClassifiers)
|
||||
new LaunchConfiguration(scalaVersion, IvyOptions(cacheDir, classifiers, repositories), app, boot, logging, properties)
|
||||
new LaunchConfiguration(scalaVersion, IvyOptions(ivyHome, classifiers, repositories), app, boot, logging, properties)
|
||||
}
|
||||
def getScala(m: LabelMap) =
|
||||
{
|
||||
@@ -94,9 +94,9 @@ class ConfigurationParser extends NotNull
|
||||
|
||||
def getIvy(m: LabelMap): Option[File] =
|
||||
{
|
||||
val (cacheDir, m1) = file(m, "cache-directory", null) // fix this later
|
||||
val (ivyHome, m1) = file(m, "ivy-home", null) // fix this later
|
||||
check(m1, "label")
|
||||
if(cacheDir eq null) None else Some(cacheDir)
|
||||
if(ivyHome eq null) None else Some(ivyHome)
|
||||
}
|
||||
def getBoot(m: LabelMap): BootSetup =
|
||||
{
|
||||
|
||||
+3
-3
@@ -87,12 +87,12 @@ class Launch private[xsbt](val bootDirectory: File, val ivyOptions: IvyOptions)
|
||||
val updateLockFile = new File(bootDirectory, "sbt.boot.lock")
|
||||
|
||||
def globalLock: xsbti.GlobalLock = Locks
|
||||
def cacheDirectory = ivyOptions.cacheDirectory.orNull
|
||||
def ivyHome = ivyOptions.ivyHome.orNull
|
||||
|
||||
class JNAProvider extends Provider
|
||||
{
|
||||
lazy val id = new Application("net.java.dev.jna", "jna", new Explicit("3.2.3"), "", Nil, false, array())
|
||||
lazy val configuration = new UpdateConfiguration(bootDirectory, ivyOptions.cacheDirectory, "", repositories)
|
||||
lazy val configuration = new UpdateConfiguration(bootDirectory, ivyOptions.ivyHome, "", repositories)
|
||||
lazy val libDirectory = new File(bootDirectory, baseDirectoryName(""))
|
||||
def baseDirectories: List[File] = new File(libDirectory, appDirectoryName(id.toID, File.separator)) :: Nil
|
||||
def testLoadClasses: List[String] = "com.sun.jna.Function" :: Nil
|
||||
@@ -108,7 +108,7 @@ class Launch private[xsbt](val bootDirectory: File, val ivyOptions: IvyOptions)
|
||||
def launcher: xsbti.Launcher = Launch.this
|
||||
def parentLoader = topLoader
|
||||
|
||||
lazy val configuration = new UpdateConfiguration(bootDirectory, ivyOptions.cacheDirectory, version, repositories)
|
||||
lazy val configuration = new UpdateConfiguration(bootDirectory, ivyOptions.ivyHome, version, repositories)
|
||||
lazy val libDirectory = new File(configuration.bootDirectory, baseDirectoryName(version))
|
||||
lazy val scalaHome = new File(libDirectory, ScalaDirectoryName)
|
||||
def compilerJar = new File(scalaHome, CompilerModuleName + ".jar")
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.net.URL
|
||||
import scala.collection.immutable.List
|
||||
|
||||
//TODO: use copy constructor, check size change
|
||||
final case class LaunchConfiguration(scalaVersion: Value[String], ivyConfiguration: IvyOptions, app: Application, boot: BootSetup, logging: Logging, appProperties: List[AppProperty]) extends NotNull
|
||||
final case class LaunchConfiguration(scalaVersion: Value[String], ivyConfiguration: IvyOptions, app: Application, boot: BootSetup, logging: Logging, appProperties: List[AppProperty])
|
||||
{
|
||||
def getScalaVersion = Value.get(scalaVersion)
|
||||
def withScalaVersion(newScalaVersion: String) = LaunchConfiguration(new Explicit(newScalaVersion), ivyConfiguration, app, boot, logging, appProperties)
|
||||
@@ -20,7 +20,7 @@ final case class LaunchConfiguration(scalaVersion: Value[String], ivyConfigurati
|
||||
LaunchConfiguration(new Explicit(newScalaVersion), ivyConfiguration.copy(classifiers = classifiers0), app.withVersion(new Explicit(newAppVersion)), boot, logging, appProperties)
|
||||
def map(f: File => File) = LaunchConfiguration(scalaVersion, ivyConfiguration, app.map(f), boot.map(f), logging, appProperties)
|
||||
}
|
||||
final case class IvyOptions(cacheDirectory: Option[File], classifiers: Classifiers, repositories: List[Repository]) extends NotNull
|
||||
final case class IvyOptions(ivyHome: Option[File], classifiers: Classifiers, repositories: List[Repository]) extends NotNull
|
||||
|
||||
sealed trait Value[T]
|
||||
final class Explicit[T](val value: T) extends Value[T] {
|
||||
|
||||
+6
-7
@@ -30,12 +30,12 @@ sealed trait UpdateTarget { def tpe: String; def classifiers: List[String] }
|
||||
final class UpdateScala(val classifiers: List[String]) extends UpdateTarget { def tpe = "scala" }
|
||||
final class UpdateApp(val id: Application, val classifiers: List[String]) extends UpdateTarget { def tpe = "app" }
|
||||
|
||||
final class UpdateConfiguration(val bootDirectory: File, val ivyCacheDirectory: Option[File], val scalaVersion: String, val repositories: List[Repository])
|
||||
final class UpdateConfiguration(val bootDirectory: File, val ivyHome: Option[File], val scalaVersion: String, val repositories: List[Repository])
|
||||
|
||||
/** Ensures that the Scala and application jars exist for the given versions or else downloads them.*/
|
||||
final class Update(config: UpdateConfiguration)
|
||||
{
|
||||
import config.{bootDirectory, ivyCacheDirectory, repositories, scalaVersion}
|
||||
import config.{bootDirectory, ivyHome, repositories, scalaVersion}
|
||||
bootDirectory.mkdirs
|
||||
|
||||
private def logFile = new File(bootDirectory, UpdateLogName)
|
||||
@@ -44,6 +44,7 @@ final class Update(config: UpdateConfiguration)
|
||||
private lazy val settings =
|
||||
{
|
||||
val settings = new IvySettings
|
||||
ivyHome foreach settings.setDefaultIvyUserDir
|
||||
addResolvers(settings)
|
||||
settings.setDefaultConflictManager(settings.getConflictManager(ConflictManagerName))
|
||||
settings.setBaseDir(bootDirectory)
|
||||
@@ -198,7 +199,7 @@ final class Update(config: UpdateConfiguration)
|
||||
if(repositories.isEmpty) error("No repositories defined.")
|
||||
for(repo <- repositories if includeRepo(repo))
|
||||
newDefault.add(toIvyRepository(settings, repo))
|
||||
configureCache(settings, ivyCacheDirectory)
|
||||
configureCache(settings)
|
||||
settings.addResolver(newDefault)
|
||||
settings.setDefaultResolver(newDefault.getName)
|
||||
}
|
||||
@@ -208,16 +209,14 @@ final class Update(config: UpdateConfiguration)
|
||||
private[this] val Snapshot = "-SNAPSHOT"
|
||||
private[this] val ChangingPattern = ".*" + Snapshot
|
||||
private[this] val ChangingMatcher = PatternMatcher.REGEXP
|
||||
private def configureCache(settings: IvySettings, dir: Option[File])
|
||||
private def configureCache(settings: IvySettings)
|
||||
{
|
||||
val cacheDir = dir.getOrElse(settings.getDefaultRepositoryCacheBasedir())
|
||||
val manager = new DefaultRepositoryCacheManager("default-cache", settings, cacheDir)
|
||||
val manager = new DefaultRepositoryCacheManager("default-cache", settings, settings.getDefaultRepositoryCacheBasedir())
|
||||
manager.setUseOrigin(true)
|
||||
manager.setChangingMatcher(ChangingMatcher)
|
||||
manager.setChangingPattern(ChangingPattern)
|
||||
settings.addRepositoryCacheManager(manager)
|
||||
settings.setDefaultRepositoryCacheManager(manager)
|
||||
dir.foreach(dir => settings.setDefaultResolutionCacheBasedir(dir.getAbsolutePath))
|
||||
}
|
||||
private def toIvyRepository(settings: IvySettings, repo: Repository) =
|
||||
{
|
||||
|
||||
@@ -10,5 +10,5 @@ public interface Launcher
|
||||
public GlobalLock globalLock();
|
||||
public File bootDirectory();
|
||||
// null if none set
|
||||
public File cacheDirectory();
|
||||
public File ivyHome();
|
||||
}
|
||||
@@ -31,4 +31,4 @@
|
||||
# sbt.version: quick=set(0.9.0-SNAPSHOT), new=prompt(sbt version)[0.9.0-SNAPSHOT], fill=prompt(sbt version)[0.9.0-SNAPSHOT]
|
||||
|
||||
#[ivy]
|
||||
# cache-directory: /home/user/.ivy2/cache2
|
||||
# ivy-home: /home/user/.ivy2
|
||||
|
||||
Reference in New Issue
Block a user