Skip to content

Commit 94eae27

Browse files
committed
move ModuleGraph et al to model package
1 parent 3cab6a8 commit 94eae27

File tree

13 files changed

+83
-6
lines changed

13 files changed

+83
-6
lines changed

src/main/scala-sbt-0.13/net/virtualvoid/sbt/graph/rendering/AsciiGraph.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package rendering
1919

2020
import com.github.mdr.ascii.layout._
2121
import net.virtualvoid.sbt.graph.DependencyGraphKeys._
22+
import net.virtualvoid.sbt.graph.model.{ Module, ModuleGraph }
2223
import sbt.Keys._
2324

2425
object AsciiGraph {

src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphKeys.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package net.virtualvoid.sbt.graph
1818

19+
import net.virtualvoid.sbt.graph.model.ModuleGraph
1920
import sbt._
2021

2122
trait DependencyGraphKeys {

src/main/scala/net/virtualvoid/sbt/graph/DependencyGraphSettings.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package net.virtualvoid.sbt.graph
1818

1919
import net.virtualvoid.sbt.graph.GraphTransformations.reverseGraphStartingAt
2020
import net.virtualvoid.sbt.graph.backend.{ IvyReport, SbtUpdateReport }
21+
import net.virtualvoid.sbt.graph.model.{ ModuleGraph, ModuleId }
2122
import net.virtualvoid.sbt.graph.rendering.{ AsciiGraph, AsciiTree, DagreHTML }
2223
import net.virtualvoid.sbt.graph.util.IOUtil
2324
import sbt.Keys._
@@ -31,7 +32,7 @@ import scala.language.reflectiveCalls
3132

3233
object DependencyGraphSettings {
3334
import DependencyGraphKeys._
34-
import ModuleGraphProtocol._
35+
import net.virtualvoid.sbt.graph.model.ModuleGraphProtocol._
3536

3637
def graphSettings = baseSettings ++ reportSettings
3738

src/main/scala/net/virtualvoid/sbt/graph/GraphTransformations.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package net.virtualvoid.sbt.graph
1818

19+
import net.virtualvoid.sbt.graph.model.{ Module, ModuleGraph, ModuleId }
20+
1921
object GraphTransformations {
2022
def reverseGraphStartingAt(graph: ModuleGraph, root: ModuleId): ModuleGraph = {
2123
val deps = graph.reverseDependencyMap

src/main/scala/net/virtualvoid/sbt/graph/backend/IvyReport.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
package net.virtualvoid.sbt.graph
1818
package backend
1919

20-
import scala.xml.{ NodeSeq, Document, Node }
20+
import net.virtualvoid.sbt.graph.model.{ Module, ModuleGraph, ModuleId }
21+
22+
import scala.xml.{ Document, Node, NodeSeq }
2123
import scala.xml.parsing.ConstructingParser
2224

2325
object IvyReport {

src/main/scala/net/virtualvoid/sbt/graph/backend/SbtUpdateReport.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
package net.virtualvoid.sbt.graph
1818
package backend
1919

20+
import net.virtualvoid.sbt.graph.model.{ Module, ModuleGraph, ModuleId }
21+
2022
import scala.language.implicitConversions
2123
import scala.language.reflectiveCalls
22-
2324
import sbt._
2425

2526
object SbtUpdateReport {

src/main/scala/net/virtualvoid/sbt/graph/model.scala renamed to src/main/scala/net/virtualvoid/sbt/graph/model/ModuleGraph.scala

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414
* limitations under the License.
1515
*/
1616

17-
package net.virtualvoid.sbt.graph
17+
package net.virtualvoid.sbt.graph.model
1818

1919
import java.io.File
2020

21-
import net.virtualvoid.sbt.graph.ModuleGraph.DepMap
21+
import net.virtualvoid.sbt.graph.model.ModuleGraph.DepMap
22+
import net.virtualvoid.sbt.graph.{ Edge, ModuleGraphProtocolCompat }
2223
import sbinary.Format
2324

25+
import scala.collection.mutable
2426
import scala.collection.mutable.{ HashMap, MultiMap, Set }
2527

2628
case class ModuleId(organisation: String,
@@ -68,6 +70,64 @@ case class ModuleGraph(nodes: Seq[Module], edges: Seq[Edge]) {
6870

6971
def roots: Seq[Module] =
7072
nodes.filter(n !edges.exists(_._2 == n.id)).sortBy(_.id.idString)
73+
74+
def filter(rules: FilterRule*): DepMap = {
75+
val map = mutable.Map[ModuleId, Option[Seq[Module]]]()
76+
77+
// Are any include- (resp. exclude-) rules present in `rules`?
78+
var (hasIncludes, hasExcludes) = (false, false)
79+
rules foreach {
80+
case _: Include hasIncludes = true
81+
case _: Exclude hasExcludes = true
82+
}
83+
84+
// Does a given ID satisfy at least one include (if any are present?)
85+
def matchesInclude(id: ModuleId): Boolean =
86+
!hasIncludes ||
87+
rules.exists {
88+
case inc: Include if inc(id) true
89+
case _ false
90+
}
91+
92+
// Is a given ID excluded?
93+
def matchesExcludes(id: ModuleId): Boolean =
94+
!hasExcludes ||
95+
!rules.exists {
96+
case exc: Exclude if exc(id) true
97+
case _ false
98+
}
99+
100+
// Keep an ID iff it satisfies at least one include (if any have been provided), and is not excluded
101+
def keep(id: ModuleId): Boolean = matchesInclude(id) && matchesExcludes(id)
102+
103+
def filtered(id: ModuleId): Option[Seq[Module]] =
104+
map.getOrElseUpdate(
105+
id,
106+
dependencyMap(id)
107+
.filter {
108+
dep
109+
filtered(dep.id).isDefined
110+
} match {
111+
case Seq() if !keep(id)
112+
// none of this module's deps passed all rules (or depend on anything that does), nor did this module
113+
// itself; drop it
114+
None
115+
case filteredDeps
116+
// Keep this module and its valid deps (which may be empty
117+
Some(filteredDeps)
118+
})
119+
120+
dependencyMap foreach {
121+
case (id, _) filtered(id)
122+
}
123+
124+
map
125+
.flatMap {
126+
case (id, Some(deps)) Some(id deps)
127+
case _ None
128+
}
129+
.toMap
130+
}
71131
}
72132

73133
object ModuleGraphProtocol extends ModuleGraphProtocolCompat {

src/main/scala/net/virtualvoid/sbt/graph/package.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package net.virtualvoid.sbt
1818

19+
import net.virtualvoid.sbt.graph.model.ModuleId
20+
1921
package object graph {
2022
type Edge = (ModuleId, ModuleId)
2123
def Edge(from: ModuleId, to: ModuleId): Edge = from -> to

src/main/scala/net/virtualvoid/sbt/graph/rendering/AsciiTree.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package net.virtualvoid.sbt.graph
1818
package rendering
1919

20+
import net.virtualvoid.sbt.graph.model.{ Module, ModuleGraph }
2021
import util.AsciiTreeLayout.toAscii
2122
import util.ConsoleUtils._
2223

src/main/scala/net/virtualvoid/sbt/graph/rendering/DOT.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package net.virtualvoid.sbt.graph
1818
package rendering
1919

20+
import net.virtualvoid.sbt.graph.model.ModuleGraph
21+
2022
object DOT {
2123
val EvictedStyle = "stroke-dasharray: 5,5"
2224

0 commit comments

Comments
 (0)