mirror of https://github.com/sbt/sbt.git
65 lines
2.4 KiB
Scala
65 lines
2.4 KiB
Scala
/* sbt -- Simple Build Tool
|
|
* Copyright 2011 Mark Harrah
|
|
*/
|
|
package sbt
|
|
|
|
import java.io.File
|
|
import Attributed.blankSeq
|
|
import Configurations.Compile
|
|
import Keys._
|
|
|
|
object IvyConsole
|
|
{
|
|
final val Name = "ivy-console"
|
|
lazy val command =
|
|
Command.command(Name) { state =>
|
|
val Dependencies(managed, repos, unmanaged) = parseDependencies(state.remainingCommands, state.log)
|
|
val base = new File(CommandUtil.bootDirectory(state), Name)
|
|
IO.createDirectory(base)
|
|
|
|
val (eval, structure) = Load.defaultLoad(state, base, state.log)
|
|
val session = Load.initialSession(structure, eval)
|
|
val extracted = Project.extract(session, structure)
|
|
import extracted._
|
|
|
|
val depSettings: Seq[Project.Setting[_]] = Seq(
|
|
libraryDependencies ++= managed.reverse,
|
|
resolvers ++= repos.reverse,
|
|
unmanagedJars in Compile ++= Attributed blankSeq unmanaged.reverse,
|
|
logLevel in Global := Level.Warn,
|
|
showSuccess in Global := false
|
|
)
|
|
val append = Load.transformSettings(Load.projectScope(currentRef), currentRef.build, rootProject, depSettings)
|
|
|
|
val newStructure = Load.reapply(session.original ++ append, structure)
|
|
val newState = state.copy(remainingCommands = "console-quick" :: Nil)
|
|
Project.setProject(session, newStructure, newState)
|
|
}
|
|
|
|
final case class Dependencies(managed: Seq[ModuleID], resolvers: Seq[Resolver], unmanaged: Seq[File])
|
|
def parseDependencies(args: Seq[String], log: Logger): Dependencies = (Dependencies(Nil, Nil, Nil) /: args)( parseArgument(log) )
|
|
def parseArgument(log: Logger)(acc: Dependencies, arg: String): Dependencies =
|
|
if(arg contains " at ")
|
|
acc.copy(resolvers = parseResolver(arg) +: acc.resolvers)
|
|
else if(arg endsWith ".jar")
|
|
acc.copy(unmanaged = new File(arg) +: acc.unmanaged)
|
|
else
|
|
acc.copy(managed = parseManaged(arg, log) ++ acc.managed)
|
|
|
|
private[this] def parseResolver(arg: String): MavenRepository =
|
|
{
|
|
val Array(name, url) = arg.split(" at ")
|
|
new MavenRepository(name.trim, url.trim)
|
|
}
|
|
|
|
val DepPattern = """([^%]+)%(%?)([^%]+)%([^%]+)""".r
|
|
def parseManaged(arg: String, log: Logger): Seq[ModuleID] =
|
|
arg match
|
|
{
|
|
case DepPattern(group, cross, name, version) =>
|
|
val crossV = if(cross.trim.isEmpty) CrossVersion.Disabled else CrossVersion.binary
|
|
ModuleID(group.trim, name.trim, version.trim, crossVersion = crossV) :: Nil
|
|
case _ => log.warn("Ignoring invalid argument '" + arg + "'"); Nil
|
|
}
|
|
}
|