From 16d4f162c2b35e21cb43ff15f5ece56d46253662 Mon Sep 17 00:00:00 2001 From: Piotr Trzpil Date: Wed, 15 Mar 2017 21:01:22 +0000 Subject: recursive pom variable substitution --- stage1/resolver.scala | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) (limited to 'stage1') diff --git a/stage1/resolver.scala b/stage1/resolver.scala index b40fb7b..1d539a2 100644 --- a/stage1/resolver.scala +++ b/stage1/resolver.scala @@ -363,27 +363,33 @@ case class BoundMavenDependency( } } def lookup( xml: Node, accessor: Node => NodeSeq ): Option[String] = { - //println("lookup in "++pomUrl) + // println("lookup in " + xml) val Substitution = "\\$\\{([^\\}]+)\\}".r - accessor(xml).headOption.map{v => - //println("found: "++v.text) + + def matcherFunc(matcher: scala.util.matching.Regex.Match): String = { + val path = matcher.group(1) + val ret = properties.get(path).orElse( + transitivePom.reverse.flatMap{ d => + Some(path.split("\\.").toList).collect{ + case "project" :: path => + path.foldLeft(d.pomXml:NodeSeq){ case (xml,tag) => xml \ tag }.text + }.filter(_ != "") + }.headOption + ) + .getOrElse( + throw new Exception(s"Can't find $path in \n$properties.\n\npomParents: $transitivePom\n\n pomXml:\n$pomXml" ) + ) + + Substitution.replaceAllIn( + ret, + matcherFunc _ + ) + } + + accessor(xml).headOption.map { v => Substitution.replaceAllIn( v.text, - matcher => { - val path = matcher.group(1) - properties.get(path).orElse( - transitivePom.reverse.flatMap{ d => - Some(path.split("\\.").toList).collect{ - case "project" :: path => - path.foldLeft(d.pomXml:NodeSeq){ case (xml,tag) => xml \ tag }.text - }.filter(_ != "") - }.headOption - ) - .getOrElse( - throw new Exception(s"Can't find $path in \n$properties.\n\npomParents: $transitivePom\n\n pomXml:\n$pomXml" ) - ) - //println("lookup "++path ++ ": "++(pomXml\path).text) - } + matcherFunc _ ) } } -- cgit v1.2.3