From 8ff37a341cf66621d9d74609d08335ca52dc7d7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81bastien=20Boulet?= Date: Thu, 18 Feb 2021 17:16:36 +0100 Subject: [PATCH] Machine-independent args cache Stamps scalafix arguments using a hash of the files instead of relying on the lastMofified property in order to produce a machine-independent "args" cache. --- src/main/scala/scalafix/sbt/ScalafixPlugin.scala | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/scala/scalafix/sbt/ScalafixPlugin.scala b/src/main/scala/scalafix/sbt/ScalafixPlugin.scala index e5e588dc..46347b10 100644 --- a/src/main/scala/scalafix/sbt/ScalafixPlugin.scala +++ b/src/main/scala/scalafix/sbt/ScalafixPlugin.scala @@ -492,7 +492,7 @@ object ScalafixPlugin extends AutoPlugin { case jar => Seq(jar) } - write(files.map(FileInfo.lastModified.apply)) + write(files.map(stampFile)) write(customDependencies.map(_.toString)) case Arg.Rules(rules) => rules.foreach { @@ -509,10 +509,10 @@ object ScalafixPlugin extends AutoPlugin { case Arg.Config(maybeFile) => maybeFile match { case Some(path) => - write(FileInfo.lastModified(path.toFile)) + write(stampFile(path.toFile)) case None => val defaultConfigFile = file(".scalafix.conf") - write(FileInfo.lastModified(defaultConfigFile)) + write(stampFile(defaultConfigFile)) } case Arg.ParsedArgs(args) => val cacheKeys = args.filter { @@ -535,6 +535,14 @@ object ScalafixPlugin extends AutoPlugin { case Arg.NoCache => throw StampingImpossible } + + def stampFile(file: File): Array[Byte] = { + // ensure the file exists and is not a directory + if (file.isFile) + Hash(file) + else + Array.empty[Byte] + } } def diffWithPreviousRuns[T](f: (Boolean, Set[File]) => T): T = {