From ff97bbec4b300804fada37b5c06bc9715e094d09 Mon Sep 17 00:00:00 2001 From: dmharrah Date: Sun, 26 Jul 2009 19:25:54 +0000 Subject: [PATCH] * Cleanup * Exposed ClasspathUtilities.toLoader(PathFinder) methods * Implemented adding project dependencies for Ivy files git-svn-id: https://simple-build-tool.googlecode.com/svn/trunk@885 d89573ee-9141-11dd-94d4-bdf5e562f29c --- src/main/scala/sbt/BasicProjectTypes.scala | 15 ++++++++++----- src/main/scala/sbt/ClasspathUtilities.scala | 11 +++++++---- src/main/scala/sbt/Logger.scala | 1 - src/main/scala/sbt/ManageDependencies.scala | 2 +- src/main/scala/sbt/TaskManager.scala | 2 +- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main/scala/sbt/BasicProjectTypes.scala b/src/main/scala/sbt/BasicProjectTypes.scala index 163a69af3..2669b1664 100644 --- a/src/main/scala/sbt/BasicProjectTypes.scala +++ b/src/main/scala/sbt/BasicProjectTypes.scala @@ -391,19 +391,24 @@ trait BasicManagedProject extends ManagedProject with ReflectiveManagedProject w Nil pathPatterns.map(_.relativePath) } - def extraDependencies: Iterable[ModuleID] = Nil//deliverProjectDependencies + def extraDependencies: Iterable[ModuleID] = deliverProjectDependencies /** The configurations to include in the publish/deliver action: specify none for all public configurations. */ def configurations: Option[Iterable[Configuration]] = None } + private[this] def depMap[T](f: BasicManagedProject => T) = + topologicalSort.dropRight(1).flatMap { case m: BasicManagedProject => f(m) :: Nil; case _ => Nil } + lazy val update = updateAction lazy val makePom = makePomAction - lazy val deliverLocal = deliverLocalAction - lazy val publishLocal = publishLocalAction - lazy val deliver = deliverAction - lazy val publish = publishAction lazy val cleanLib = cleanLibAction lazy val cleanCache = cleanCacheAction + // deliver must run after its dependencies' `publish` so that the artifacts produced by the dependencies can be resolved + // (deliver requires a resolve first) + lazy val deliverLocal: Task = deliverLocalAction dependsOn(depMap(_.publishLocal) : _*) + lazy val publishLocal: Task = publishLocalAction + lazy val deliver: Task = deliverAction dependsOn(depMap(_.publish) : _*) + lazy val publish: Task = publishAction } object BasicManagedProject diff --git a/src/main/scala/sbt/ClasspathUtilities.scala b/src/main/scala/sbt/ClasspathUtilities.scala index 878798002..29f71bb48 100644 --- a/src/main/scala/sbt/ClasspathUtilities.scala +++ b/src/main/scala/sbt/ClasspathUtilities.scala @@ -9,7 +9,7 @@ import java.util.Collections import scala.collection.Set import scala.collection.mutable.{HashSet, ListBuffer} -private[sbt] object ClasspathUtilities +object ClasspathUtilities { def toClasspath(finder: PathFinder): Array[URL] = toClasspath(finder.get) def toClasspath(paths: Iterable[Path]): Array[URL] = paths.map(_.asURL).toSeq.toArray @@ -18,13 +18,16 @@ private[sbt] object ClasspathUtilities def toLoader(paths: Iterable[Path]): ClassLoader = new URLClassLoader(toClasspath(paths), getClass.getClassLoader) def toLoader(paths: Iterable[Path], parent: ClassLoader): ClassLoader = new URLClassLoader(toClasspath(paths), parent) + private[sbt] def printSource(c: Class[_]) = + println(c.getName + " loader=" +c.getClassLoader + " location=" + FileUtilities.classLocationFile(c)) + def isArchive(path: Path): Boolean = isArchive(path.asFile) def isArchive(file: File): Boolean = isArchiveName(file.getName) def isArchiveName(fileName: String) = fileName.endsWith(".jar") || fileName.endsWith(".zip") // Partitions the given classpath into (jars, directories) - def separate(paths: Iterable[File]): (Iterable[File], Iterable[File]) = paths.partition(isArchive) + private[sbt] def separate(paths: Iterable[File]): (Iterable[File], Iterable[File]) = paths.partition(isArchive) // Partitions the given classpath into (jars, directories) - def separatePaths(paths: Iterable[Path]) = separate(paths.map(_.asFile.getCanonicalFile)) + private[sbt] def separatePaths(paths: Iterable[Path]) = separate(paths.map(_.asFile.getCanonicalFile)) private[sbt] def buildSearchPaths(classpath: Iterable[Path]): (wrap.Set[File], wrap.Set[File]) = { val (jars, dirs) = separatePaths(classpath) @@ -40,7 +43,7 @@ private[sbt] object ClasspathUtilities } /** Returns all entries in 'classpath' that correspond to a compiler plugin.*/ - def compilerPlugins(classpath: Iterable[Path]): Iterable[File] = + private[sbt] def compilerPlugins(classpath: Iterable[Path]): Iterable[File] = { val loader = new URLClassLoader(classpath.map(_.asURL).toList.toArray) wrap.Wrappers.toList(loader.getResources("scalac-plugin.xml")).flatMap(asFile) diff --git a/src/main/scala/sbt/Logger.scala b/src/main/scala/sbt/Logger.scala index 3ee042897..12b820808 100644 --- a/src/main/scala/sbt/Logger.scala +++ b/src/main/scala/sbt/Logger.scala @@ -35,7 +35,6 @@ abstract class Logger extends NotNull def log(level: Level.Value, message: => String): Unit def control(event: ControlEvent.Value, message: => String): Unit - /** Use this method to ensure calls. */ def logAll(events: Seq[LogEvent]): Unit /** Defined in terms of other methods in Logger and should not be called from them. */ final def log(event: LogEvent) diff --git a/src/main/scala/sbt/ManageDependencies.scala b/src/main/scala/sbt/ManageDependencies.scala index 7bcf2bc58..76f293543 100644 --- a/src/main/scala/sbt/ManageDependencies.scala +++ b/src/main/scala/sbt/ManageDependencies.scala @@ -408,7 +408,7 @@ object ManageDependencies Control.trapUnit("Could not deliver: ", ivyConfig.log) { val module = addLateDependencies(ivy, md, default, extraDependencies) - resolve(ivy, updateConfig, module) orElse + resolve(ivy, updateConfig, module) orElse // todo: set download = false for resolve { val revID = module.getModuleRevisionId val options = DeliverOptions.newInstance(ivy.getSettings).setStatus(status) diff --git a/src/main/scala/sbt/TaskManager.scala b/src/main/scala/sbt/TaskManager.scala index b8043fd05..8977c728f 100644 --- a/src/main/scala/sbt/TaskManager.scala +++ b/src/main/scala/sbt/TaskManager.scala @@ -82,7 +82,7 @@ trait TaskManager{ def work = createWork } def dynamic(createTask: => Project#Task) = new CompoundTask(SubWork[Project#Task](checkDynamic(createTask))) - + @deprecated def compoundTask(createTask: => Project#Task) = dynamic(createTask) /** Verifies that the given dynamically created task does not depend on any statically defined tasks. * Returns the task if it is valid.*/ private def checkDynamic(task: Project#Task) =