diff --git a/lm-coursier/src/main/scala/lmcoursier/internal/LockFile.scala b/lm-coursier/src/main/scala/lmcoursier/internal/LockFile.scala index ed482a344..fdbda1d2a 100644 --- a/lm-coursier/src/main/scala/lmcoursier/internal/LockFile.scala +++ b/lm-coursier/src/main/scala/lmcoursier/internal/LockFile.scala @@ -3,7 +3,7 @@ package lmcoursier.internal import java.io.File import java.nio.file.Files import java.nio.charset.StandardCharsets -import sjsonnew.support.scalajson.unsafe.{ CompactPrinter, Converter, Parser } +import sjsonnew.support.scalajson.unsafe.{ Converter, Parser, PrettyPrinter } import scala.util.{ Try, Success, Failure } object LockFile { @@ -29,7 +29,7 @@ object LockFile { def write(lockFile: File, data: LockFileData): Either[String, Unit] = { Try { val json = Converter.toJson(data).get - val content = CompactPrinter(json) + val content = PrettyPrinter(json) lockFile.getParentFile.mkdirs() Files.write(lockFile.toPath, content.getBytes(StandardCharsets.UTF_8)) } match { diff --git a/lm-coursier/src/test/scala/lmcoursier/LockFileSpec.scala b/lm-coursier/src/test/scala/lmcoursier/LockFileSpec.scala index eb35c2f37..007e27a67 100644 --- a/lm-coursier/src/test/scala/lmcoursier/LockFileSpec.scala +++ b/lm-coursier/src/test/scala/lmcoursier/LockFileSpec.scala @@ -104,6 +104,27 @@ class LockFileSpec extends AnyFunSuite { } } + test("LockFile.write outputs pretty JSON") { + val lockData = LockFileData( + version = "1.0", + buildClock = "pretty-test", + configurations = Vector.empty, + metadata = LockFileMetadata( + sbtVersion = "2.0.0", + scalaVersion = Some("3.8.1") + ) + ) + + IO.withTemporaryDirectory { dir => + val lockFile = new File(dir, "pretty.lock") + val writeResult = LockFile.write(lockFile, lockData) + assert(writeResult.isRight, s"Write failed: ${writeResult.left.getOrElse("")}") + + val content = IO.read(lockFile) + assert(content.contains("\n"), "Expected pretty-printed JSON with multiple lines") + } + } + test("cacheFileToOriginalUrl converts cache file URL to HTTP URL") { IO.withTemporaryDirectory { cacheDir => val fileUrl =