/
XmlTransformer.scala
30 lines (27 loc) · 1.23 KB
/
XmlTransformer.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import sbt._
import sbt.librarymanagement.ModuleFilter
import scala.xml.transform.{RewriteRule, RuleTransformer}
import scala.xml.{Elem, Node, NodeSeq}
object XmlTransformer {
/**
* Constructs a new XML [[scala.xml.transform.RuleTransformer]] based on the argument ''blacklist'' module filter
* that strips out ''dependency'' xml nodes that are matched by the ''blacklist''.
*
* @param blacklist
* the filter to apply to dependencies
* @return
* a new XML [[scala.xml.transform.RuleTransformer]] that strips out ''blacklist''ed dependencies
*/
def transformer(blacklist: ModuleFilter): RuleTransformer =
new RuleTransformer(new RewriteRule {
override def transform(node: Node): NodeSeq =
node match {
case e: Elem if e.label == "dependency" =>
val organization = e.child.filter(_.label == "groupId").flatMap(_.text).mkString
val artifact = e.child.filter(_.label == "artifactId").flatMap(_.text).mkString
val version = e.child.filter(_.label == "version").flatMap(_.text).mkString
if (blacklist(organization % artifact % version)) NodeSeq.Empty else node
case _ => node
}
})
}