Merge pull request #212 from eatkins/binary-compatibility

Unbreak binary compatibility
This commit is contained in:
eugene yokota 2019-08-21 14:07:11 -04:00 committed by GitHub
commit a0bb867dd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 18 deletions

View File

@ -152,15 +152,6 @@ lazy val utilCache = (project in file("util-cache"))
libraryDependencies ++= Seq(scalaTest),
mimaSettings,
mimaBinaryIssueFilters ++= Seq(
// These are private case classes that have changed
exclude[IncompatibleMethTypeProblem]("sbt.util.FileHashModified.apply"),
exclude[IncompatibleResultTypeProblem]("sbt.util.FileHashModified.copy$default$2"),
exclude[IncompatibleMethTypeProblem]("sbt.util.FileHashModified.copy"),
exclude[IncompatibleMethTypeProblem]("sbt.util.FileHashModified.this"),
exclude[IncompatibleMethTypeProblem]("sbt.util.FileHash.apply"),
exclude[IncompatibleResultTypeProblem]("sbt.util.FileHash.copy$default$2"),
exclude[IncompatibleMethTypeProblem]("sbt.util.FileHash.copy"),
exclude[IncompatibleMethTypeProblem]("sbt.util.FileHash.this"),
// Added a method to a sealed trait, technically not a problem for Scala
exclude[ReversedMissingMethodProblem]("sbt.util.HashFileInfo.hashArray"),
)

View File

@ -36,9 +36,25 @@ object HashModifiedFileInfo {
private final case class PlainFile(file: File, exists: Boolean) extends PlainFileInfo
private final case class FileModified(file: File, lastModified: Long) extends ModifiedFileInfo
private final case class FileHash(file: File, hashArray: Array[Byte]) extends HashFileInfo
private final case class FileHashModified(file: File, hashArray: Array[Byte], lastModified: Long)
extends HashModifiedFileInfo
@deprecated("Kept for plugin compat, but will be removed in sbt 2.0", "1.3.0")
private final case class FileHash(file: File, override val hash: List[Byte]) extends HashFileInfo {
override val hashArray: Array[Byte] = hash.toArray
}
private final case class FileHashArrayRepr(file: File, override val hashArray: Array[Byte])
extends HashFileInfo
@deprecated("Kept for plugin compat, but will be removed in sbt 2.0", "1.3.0")
private final case class FileHashModified(
file: File,
override val hash: List[Byte],
lastModified: Long
) extends HashModifiedFileInfo {
override val hashArray: Array[Byte] = hash.toArray
}
private final case class FileHashModifiedArrayRepr(
file: File,
override val hashArray: Array[Byte],
lastModified: Long
) extends HashModifiedFileInfo
final case class FilesInfo[F <: FileInfo] private (files: Set[F])
object FilesInfo {
@ -111,15 +127,15 @@ object FileInfo {
val hash = unbuilder.readField[Array[Byte]]("hash")
val lastModified = unbuilder.readField[Long]("lastModified")
unbuilder.endObject()
FileHashModified(file, hash, lastModified)
FileHashModifiedArrayRepr(file, hash, lastModified)
case None => deserializationError("Expected JsObject but found None")
}
}
implicit def apply(file: File): HashModifiedFileInfo =
FileHashModified(file.getAbsoluteFile, Hash(file), IO.getModifiedTimeOrZero(file))
FileHashModifiedArrayRepr(file.getAbsoluteFile, Hash(file), IO.getModifiedTimeOrZero(file))
def apply(file: File, hash: Array[Byte], lastModified: Long): HashModifiedFileInfo =
FileHashModified(file.getAbsoluteFile, hash, lastModified)
FileHashModifiedArrayRepr(file.getAbsoluteFile, hash, lastModified)
}
object hash extends Style {
@ -139,14 +155,15 @@ object FileInfo {
val file = unbuilder.readField[File]("file")
val hash = unbuilder.readField[Array[Byte]]("hash")
unbuilder.endObject()
FileHash(file, hash)
FileHashArrayRepr(file, hash)
case None => deserializationError("Expected JsObject but found None")
}
}
implicit def apply(file: File): HashFileInfo = FileHash(file.getAbsoluteFile, computeHash(file))
implicit def apply(file: File): HashFileInfo =
FileHashArrayRepr(file.getAbsoluteFile, computeHash(file))
def apply(file: File, bytes: Array[Byte]): HashFileInfo =
FileHash(file.getAbsoluteFile, bytes)
FileHashArrayRepr(file.getAbsoluteFile, bytes)
private def computeHash(file: File): Array[Byte] =
try Hash(file)