summaryrefslogtreecommitdiff
path: root/main/src/mill/main/VisualizeModule.scala
blob: e939bd864a8f9f5ec414a1da9ffeb51451a409d5 (plain) (blame)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package mill.main

import ammonite.ops.Path
import coursier.Cache
import coursier.core.Repository
import coursier.maven.MavenRepository
import mill.T
import mill.define.{Discover, ExternalModule}
import mill.eval.{Evaluator, PathRef, Result}

object VisualizeModule extends ExternalModule with VisualizeModule {
  def repositories = Seq(
    Cache.ivy2Local,
    MavenRepository("https://repo1.maven.org/maven2"),
    MavenRepository("https://oss.sonatype.org/content/repositories/releases")
  )

  implicit def millScoptEvaluatorReads[T] = new mill.main.EvaluatorScopt[T]()
  lazy val millDiscover = Discover[this.type]
}
trait VisualizeModule extends mill.define.TaskModule{
  def repositories: Seq[Repository]
  def defaultCommandName() = "run"
  def classpath = T{
    mill.modules.Util.millProjectModule("MILL_GRAPHVIZ", "mill-main-graphviz", repositories)
  }
  /**
    * Given a set of tasks, prints out the execution plan of what tasks will be
    * executed in what order, without actually executing them.
    */
  def run(evaluator: Evaluator[Any], targets: String*) = mill.T.command{
    val resolved = RunScript.resolveTasks(
      mill.main.ResolveTasks, evaluator, targets, multiSelect = true
    )
    resolved match{
      case Left(err) => Result.Failure(err)
      case Right(rs) =>
        Result.Success(
          mill.modules.Jvm.inprocess(classpath().map(_.path), false, isolated = false, cl => {
            cl.loadClass("mill.main.graphviz.GraphvizTools")
              .getMethod("apply", classOf[Seq[_]], classOf[Path])
              .invoke(null, rs, T.ctx().dest)
              .asInstanceOf[Seq[PathRef]]
          })
        )

    }
  }

}