more consistent configuration of the Ivy user directory

This commit is contained in:
Mark Harrah
2011-03-12 10:28:53 -05:00
parent f18241395b
commit d371ff9314
12 changed files with 42 additions and 42 deletions
+4 -4
View File
@@ -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
View File
@@ -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")
+2 -2
View File
@@ -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
View File
@@ -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