From 5cd797e25682ea3ac8d02c75b06c905c5b2fb103 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Sun, 26 Nov 2017 19:31:38 +0100 Subject: Bust caches when the build itself has changed. (#24) Use the Ammonite classloader to check if the classpath has changed Fix #7 --- core/src/main/scala/mill/eval/Evaluator.scala | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'core') diff --git a/core/src/main/scala/mill/eval/Evaluator.scala b/core/src/main/scala/mill/eval/Evaluator.scala index 6acfe066..007e1755 100644 --- a/core/src/main/scala/mill/eval/Evaluator.scala +++ b/core/src/main/scala/mill/eval/Evaluator.scala @@ -1,13 +1,14 @@ package mill.eval import ammonite.ops._ +import ammonite.runtime.SpecialClassLoader import mill.define.{Graph, Target, Task} import mill.discover.Mirror import mill.discover.Mirror.LabelledTarget import mill.util import mill.util.{Args, MultiBiMap, OSet} - import scala.collection.mutable + class Evaluator(workspacePath: Path, labeling: Map[Target[_], LabelledTarget[_]], log: String => Unit){ @@ -62,9 +63,16 @@ class Evaluator(workspacePath: Path, val externalInputs = group.items.flatMap(_.inputs).filter(!group.contains(_)) + // check if the build itself has changed + val classLoaderSig = Thread.currentThread().getContextClassLoader match { + case scl: SpecialClassLoader => scl.classpathSignature + case _ => Nil + } + val inputsHash = externalInputs.map(results).toVector.hashCode + - group.toIterator.map(_.sideHash).toVector.hashCode() + group.toIterator.map(_.sideHash).toVector.hashCode() + + classLoaderSig.hashCode() terminal match{ case Left(task) => -- cgit v1.2.3