mirror of https://github.com/sbt/sbt.git
Miscellaneous updates
- honor includeTypes to filter dependency artifact candidates for classifier setting - prefer the more stable Seq[_] instead of Iterable[_] - import cleanups
This commit is contained in:
parent
7141000e65
commit
31f5133ff6
|
|
@ -4,21 +4,15 @@
|
|||
package sbt
|
||||
|
||||
import java.io.File
|
||||
import scala.xml.{Node => XNode,NodeSeq}
|
||||
import scala.xml.{Node => XNode, NodeSeq}
|
||||
|
||||
import org.apache.ivy.{core, plugins, Ivy}
|
||||
import core.cache.DefaultRepositoryCacheManager
|
||||
import core.{IvyPatternHelper,LogOptions}
|
||||
import core.{IvyPatternHelper, LogOptions}
|
||||
import core.deliver.DeliverOptions
|
||||
import core.install.InstallOptions
|
||||
import core.module.descriptor.{Artifact => IArtifact, DefaultArtifact, DefaultDependencyArtifactDescriptor, MDArtifact}
|
||||
import core.module.descriptor.{DefaultDependencyDescriptor, DefaultModuleDescriptor, DependencyDescriptor, ModuleDescriptor}
|
||||
import core.module.id.{ArtifactId,ModuleId, ModuleRevisionId}
|
||||
import core.publish.PublishOptions
|
||||
import core.report.{ArtifactDownloadReport,ResolveReport}
|
||||
import core.module.descriptor.{Artifact => IArtifact, MDArtifact, ModuleDescriptor, DefaultModuleDescriptor}
|
||||
import core.report.ResolveReport
|
||||
import core.resolve.ResolveOptions
|
||||
import core.retrieve.RetrieveOptions
|
||||
import plugins.parser.m2.{PomModuleDescriptorParser,PomModuleDescriptorWriter}
|
||||
import plugins.resolver.{BasicResolver, DependencyResolver}
|
||||
|
||||
final class DeliverConfiguration(val deliverIvyPattern: String, val status: String, val configurations: Option[Seq[Configuration]], val logging: UpdateLogging.Value)
|
||||
|
|
@ -26,7 +20,7 @@ final class PublishConfiguration(val ivyFile: Option[File], val resolverName: St
|
|||
|
||||
final class UpdateConfiguration(val retrieve: Option[RetrieveConfiguration], val missingOk: Boolean, val logging: UpdateLogging.Value)
|
||||
final class RetrieveConfiguration(val retrieveDirectory: File, val outputPattern: String)
|
||||
final case class MakePomConfiguration(file: File, moduleInfo: ModuleInfo, configurations: Option[Iterable[Configuration]] = None, extra: NodeSeq = NodeSeq.Empty, process: XNode => XNode = n => n, filterRepositories: MavenRepository => Boolean = _ => true, allRepositories: Boolean)
|
||||
final case class MakePomConfiguration(file: File, moduleInfo: ModuleInfo, configurations: Option[Seq[Configuration]] = None, extra: NodeSeq = NodeSeq.Empty, process: XNode => XNode = n => n, filterRepositories: MavenRepository => Boolean = _ => true, allRepositories: Boolean, includeTypes: Set[String] = Set(Artifact.DefaultType))
|
||||
// exclude is a map on a restricted ModuleID
|
||||
final case class GetClassifiersConfiguration(module: GetClassifiersModule, exclude: Map[ModuleID, Set[String]], configuration: UpdateConfiguration, ivyScala: Option[IvyScala])
|
||||
final case class GetClassifiersModule(id: ModuleID, modules: Seq[ModuleID], configurations: Seq[Configuration], classifiers: Seq[String])
|
||||
|
|
@ -66,9 +60,9 @@ object IvyActions
|
|||
/** Creates a Maven pom from the given Ivy configuration*/
|
||||
def makePom(module: IvySbt#Module, configuration: MakePomConfiguration, log: Logger)
|
||||
{
|
||||
import configuration.{allRepositories, moduleInfo, configurations, extra, file, filterRepositories, process}
|
||||
import configuration.{allRepositories, moduleInfo, configurations, extra, file, filterRepositories, process, includeTypes}
|
||||
module.withModule(log) { (ivy, md, default) =>
|
||||
(new MakePom(log)).write(ivy, md, moduleInfo, configurations, extra, process, filterRepositories, allRepositories, file)
|
||||
(new MakePom(log)).write(ivy, md, moduleInfo, configurations, includeTypes, extra, process, filterRepositories, allRepositories, file)
|
||||
log.info("Wrote " + file.getAbsolutePath)
|
||||
}
|
||||
}
|
||||
|
|
@ -168,8 +162,8 @@ object IvyActions
|
|||
|
||||
def transitiveScratch(ivySbt: IvySbt, label: String, config: GetClassifiersConfiguration, log: Logger): UpdateReport =
|
||||
{
|
||||
import config.{configuration => c, ivyScala, module => mod}
|
||||
import mod.{configurations => confs, id, modules => deps}
|
||||
import config.{configuration => c, ivyScala, module => mod}
|
||||
import mod.{id, modules => deps}
|
||||
val base = restrictedCopy(id, true).copy(name = id.name + "$" + label)
|
||||
val module = new ivySbt.Module(InlineConfiguration(base, ModuleInfo(base.name), deps).copy(ivyScala = ivyScala))
|
||||
val report = update(module, c, log)
|
||||
|
|
@ -178,8 +172,8 @@ object IvyActions
|
|||
}
|
||||
def updateClassifiers(ivySbt: IvySbt, config: GetClassifiersConfiguration, log: Logger): UpdateReport =
|
||||
{
|
||||
import config.{configuration => c, module => mod, _}
|
||||
import mod.{configurations => confs, _}
|
||||
import config.{configuration => c, module => mod, _}
|
||||
import mod.{configurations => confs, _}
|
||||
assert(!classifiers.isEmpty, "classifiers cannot be empty")
|
||||
val baseModules = modules map { m => restrictedCopy(m, true) }
|
||||
val deps = baseModules.distinct flatMap classifiedArtifacts(classifiers, exclude)
|
||||
|
|
@ -223,7 +217,7 @@ object IvyActions
|
|||
}
|
||||
private def retrieve(ivy: Ivy, report: UpdateReport, config: RetrieveConfiguration): UpdateReport =
|
||||
retrieve(ivy, report, config.retrieveDirectory, config.outputPattern)
|
||||
|
||||
|
||||
private def retrieve(ivy: Ivy, report: UpdateReport, base: File, pattern: String): UpdateReport =
|
||||
{
|
||||
val toCopy = new collection.mutable.HashSet[(File,File)]
|
||||
|
|
@ -255,7 +249,7 @@ object IvyActions
|
|||
case Full => LOG_DEFAULT
|
||||
}
|
||||
|
||||
def publish(module: ModuleDescriptor, artifacts: Iterable[(IArtifact, File)], resolver: DependencyResolver, overwrite: Boolean): Unit =
|
||||
def publish(module: ModuleDescriptor, artifacts: Seq[(IArtifact, File)], resolver: DependencyResolver, overwrite: Boolean): Unit =
|
||||
try {
|
||||
resolver.beginPublishTransaction(module.getModuleRevisionId(), overwrite);
|
||||
for( (artifact, file) <- artifacts) if(file.exists)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
// based on Ivy's PomModuleDescriptorWriter, which is Apache Licensed, Version 2.0
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
package sbt;
|
||||
package sbt
|
||||
|
||||
import java.io.File
|
||||
// Node needs to be renamed to XNode because the task subproject contains a Node type that will shadow
|
||||
|
|
@ -15,15 +15,17 @@ import Configurations.Optional
|
|||
|
||||
import org.apache.ivy.{core, plugins, Ivy}
|
||||
import core.settings.IvySettings
|
||||
import core.module.{descriptor, id}
|
||||
import core.module.descriptor
|
||||
import descriptor.{DependencyDescriptor, License, ModuleDescriptor, ExcludeRule}
|
||||
import id.ModuleRevisionId
|
||||
import plugins.resolver.{ChainResolver, DependencyResolver, IBiblioResolver}
|
||||
|
||||
class MakePom(val log: Logger)
|
||||
{
|
||||
@deprecated("Use `write(Ivy, ModuleDescriptor, ModuleInfo, Option[Iterable[Configuration]], Set[String], NodeSeq, XNode => XNode, MavenRepository => Boolean, Boolean, File)` instead", "0.11.2")
|
||||
def write(ivy: Ivy, module: ModuleDescriptor, moduleInfo: ModuleInfo, configurations: Option[Iterable[Configuration]], extra: NodeSeq, process: XNode => XNode, filterRepositories: MavenRepository => Boolean, allRepositories: Boolean, output: File): Unit =
|
||||
write(process(toPom(ivy, module, moduleInfo, configurations, extra, filterRepositories, allRepositories)), output)
|
||||
write(ivy, module, moduleInfo: ModuleInfo, configurations: Option[Iterable[Configuration]], Set(Artifact.DefaultType), extra, process, filterRepositories, allRepositories, output)
|
||||
def write(ivy: Ivy, module: ModuleDescriptor, moduleInfo: ModuleInfo, configurations: Option[Iterable[Configuration]], includeTypes: Set[String], extra: NodeSeq, process: XNode => XNode, filterRepositories: MavenRepository => Boolean, allRepositories: Boolean, output: File): Unit =
|
||||
write(process(toPom(ivy, module, moduleInfo, configurations, includeTypes, extra, filterRepositories, allRepositories)), output)
|
||||
// use \n as newline because toString uses PrettyPrinter, which hard codes line endings to be \n
|
||||
def write(node: XNode, output: File): Unit = write(toString(node), output, "\n")
|
||||
def write(xmlString: String, output: File, newline: String)
|
||||
|
|
@ -32,7 +34,10 @@ class MakePom(val log: Logger)
|
|||
}
|
||||
|
||||
def toString(node: XNode): String = new PrettyPrinter(1000, 4).format(node)
|
||||
@deprecated("Use `toPom(Ivy, ModuleDescriptor, ModuleInfo, Option[Iterable[Configuration]], Set[String], NodeSeq, MavenRepository => Boolean, Boolean)` instead", "0.11.2")
|
||||
def toPom(ivy: Ivy, module: ModuleDescriptor, moduleInfo: ModuleInfo, configurations: Option[Iterable[Configuration]], extra: NodeSeq, filterRepositories: MavenRepository => Boolean, allRepositories: Boolean): XNode =
|
||||
toPom(ivy, module, moduleInfo, configurations, Set(Artifact.DefaultType), extra, filterRepositories, allRepositories)
|
||||
def toPom(ivy: Ivy, module: ModuleDescriptor, moduleInfo: ModuleInfo, configurations: Option[Iterable[Configuration]], includeTypes: Set[String], extra: NodeSeq, filterRepositories: MavenRepository => Boolean, allRepositories: Boolean): XNode =
|
||||
(<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
{ makeModuleID(module) }
|
||||
|
|
@ -43,7 +48,7 @@ class MakePom(val log: Logger)
|
|||
{
|
||||
val deps = depsInConfs(module, configurations)
|
||||
makeProperties(module, deps) ++
|
||||
makeDependencies(deps)
|
||||
makeDependencies(deps, includeTypes)
|
||||
}
|
||||
{ makeRepositories(ivy.getSettings, allRepositories, filterRepositories) }
|
||||
</project>)
|
||||
|
|
@ -116,15 +121,15 @@ class MakePom(val log: Logger)
|
|||
}
|
||||
val IgnoreTypes: Set[String] = Set(Artifact.SourceType, Artifact.DocType, Artifact.PomType)
|
||||
|
||||
def makeDependencies(dependencies: Seq[DependencyDescriptor]): NodeSeq =
|
||||
def makeDependencies(dependencies: Seq[DependencyDescriptor], includeTypes: Set[String]): NodeSeq =
|
||||
if(dependencies.isEmpty)
|
||||
NodeSeq.Empty
|
||||
else
|
||||
<dependencies>
|
||||
{ dependencies.map(makeDependency) }
|
||||
{ dependencies.map(makeDependency(_, includeTypes)) }
|
||||
</dependencies>
|
||||
|
||||
def makeDependency(dependency: DependencyDescriptor): NodeSeq =
|
||||
def makeDependency(dependency: DependencyDescriptor, includeTypes: Set[String]): NodeSeq =
|
||||
{
|
||||
val mrid = dependency.getDependencyRevisionId
|
||||
<dependency>
|
||||
|
|
@ -132,14 +137,14 @@ class MakePom(val log: Logger)
|
|||
<artifactId>{mrid.getName}</artifactId>
|
||||
<version>{mrid.getRevision}</version>
|
||||
{ scopeAndOptional(dependency) }
|
||||
{ classifier(dependency) }
|
||||
{ classifier(dependency, includeTypes) }
|
||||
{ exclusions(dependency) }
|
||||
</dependency>
|
||||
}
|
||||
|
||||
def classifier(dependency: DependencyDescriptor): NodeSeq =
|
||||
def classifier(dependency: DependencyDescriptor, includeTypes: Set[String]): NodeSeq =
|
||||
{
|
||||
val jarDep = dependency.getAllDependencyArtifacts.filter(_.getType == Artifact.DefaultType).headOption
|
||||
val jarDep = dependency.getAllDependencyArtifacts.filter(d => includeTypes(d.getType)).headOption
|
||||
jarDep match {
|
||||
case Some(a) => {
|
||||
val cl = a.getExtraAttribute("classifier")
|
||||
|
|
|
|||
Loading…
Reference in New Issue