diff --git a/src/main/scala/sbtassembly/Assembly.scala b/src/main/scala/sbtassembly/Assembly.scala index 43456c44..def667b9 100644 --- a/src/main/scala/sbtassembly/Assembly.scala +++ b/src/main/scala/sbtassembly/Assembly.scala @@ -699,14 +699,14 @@ object Assembly { private[sbtassembly] def sha1 = MessageDigest.getInstance("SHA-1") - private[sbtassembly] def sha1Content(b: Array[Byte]): String = - byteArrayInputStreamResource(b) { in => + private[sbtassembly] def sha1Content(stream: InputStream): String = + { val messageDigest = sha1 val buffer = new Array[Byte](8192) @tailrec def read(): Unit = { - val byteCount = in.read(buffer) + val byteCount = stream.read(buffer) if (byteCount >= 0) { messageDigest.update(buffer, 0, byteCount) read() @@ -714,6 +714,7 @@ object Assembly { } read() + stream.close() bytesToString(messageDigest.digest()) } diff --git a/src/main/scala/sbtassembly/MergeStrategy.scala b/src/main/scala/sbtassembly/MergeStrategy.scala index 10f845f7..9e21fa60 100644 --- a/src/main/scala/sbtassembly/MergeStrategy.scala +++ b/src/main/scala/sbtassembly/MergeStrategy.scala @@ -122,10 +122,11 @@ object MergeStrategy { * Verifies if all the conflicts have the same content, otherwise error out */ val deduplicate: MergeStrategy = MergeStrategy("Deduplicate") { conflicts => - val conflictContents = conflicts.map(_.stream()).map(Streamable.bytes(_)) - val fingerprints = Set() ++ conflictContents.map(sbtassembly.Assembly.sha1Content) + val fingerprints = conflicts.map(dep => + sbtassembly.Assembly.sha1Content(dep.stream()) + ).toSet if (fingerprints.size == 1) - Right(Vector(JarEntry(conflicts.head.target, () => new ByteArrayInputStream(conflictContents.head)))) + Right(Vector(JarEntry(conflicts.head.target, conflicts.head.stream))) else Left( s"Deduplicate found different file contents in the following:$newLineIndented${conflicts.mkString(newLineIndented)}"