From b19c219f01eac0e5874e6270226ca7dd32894ed3 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 8 Dec 2010 10:14:27 +0100 Subject: [PATCH] Adding McPom --- project/build/AkkaProject.scala | 49 ++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index c340c29a74..9356f5504e 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -441,7 +441,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { lazy val stressTestsEnabled = systemOptional[Boolean]("stress.tests",false) // ------------------------------------------------------------ - class AkkaDefaultProject(info: ProjectInfo, val deployPath: Path) extends DefaultProject(info) with DeployProject with OSGiProject { + class AkkaDefaultProject(info: ProjectInfo, val deployPath: Path) extends DefaultProject(info) with DeployProject with OSGiProject with McPom { override def disableCrossPaths = true lazy val sourceArtifact = Artifact(this.artifactID, "source", "jar", Some("sources"), Nil, None) lazy val docsArtifact = Artifact(this.artifactID, "doc", "jar", Some("docs"), Nil, None) @@ -450,6 +450,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { override def packageDocsJar = this.defaultJarPath("-docs.jar") override def packageSrcJar = this.defaultJarPath("-sources.jar") override def packageToPublishActions = super.packageToPublishActions ++ Seq(this.packageDocs, this.packageSrc) + override def pomPostProcess(node: scala.xml.Node): scala.xml.Node = mcPom(AkkaParentProject.this.moduleConfigurations)(super.pomPostProcess(node)) /** * Used for testOptions, possibility to enable the running of integration and or stresstests @@ -492,3 +493,49 @@ trait DeployProject { self: BasicScalaProject => trait OSGiProject extends BNDPlugin { self: DefaultProject => override def bndExportPackage = Seq("akka.*;version=%s".format(projectVersion.value)) } + +trait McPom { self: DefaultProject => + import scala.xml._ + + def mcPom(mcs: Set[ModuleConfiguration])(node: Node): Node = { + + def cleanUrl(url: String) = url match { + case null => "" + case "" => "" + case u if u endsWith "/" => u + case u => u + "/" + } + + val oldRepos = (node \\ "project" \ "repositories" \ "repository"). + map( n => cleanUrl((n \ "url").text) -> (n \ "name").text).toList + val newRepos = mcs.filter(_.resolver.isInstanceOf[MavenRepository]).map(m => { + val r = m.resolver.asInstanceOf[MavenRepository] + cleanUrl(r.root) -> r.name + }) + + val repos = Map((oldRepos ++ newRepos):_*).map( pair => + + {pair._2.toSeq.filter(_.isLetterOrDigit).mkString} + {pair._2} + {pair._1} + + ) + + def rewrite(pf:PartialFunction[Node,Node])(ns: Seq[Node]): Seq[Node] = for(subnode <- ns) yield subnode match { + case e: Elem => + if (pf isDefinedAt e) pf(e) + else Elem(e.prefix, e.label, e.attributes, e.scope, rewrite(pf)(e.child):_*) + case other => other + } + + val rule: PartialFunction[Node,Node] = if ((node \\ "project" \ "repositories" ).isEmpty) { + case Elem(prefix, "project", attribs, scope, children @ _*) => + Elem(prefix, "project", attribs, scope, children ++ {repos}:_*) + } else { + case Elem(prefix, "repositories", attribs, scope, children @ _*) => + Elem(prefix, "repositories", attribs, scope, repos.toList:_*) + } + + rewrite(rule)(node.theSeq)(0) + } +} \ No newline at end of file