Skip to content

Commit 2cc578b

Browse files
committed
Include artifact differences in long report
1 parent b8090b8 commit 2cc578b

File tree

4 files changed

+117
-7
lines changed

4 files changed

+117
-7
lines changed

src/main/resources/messages.properties

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,10 @@ lock.status.full.dependencies.removed.multiple=\ \ {0} dependencies removed:\n{1
4242

4343
lock.status.full.dependencies.changed.none=
4444
lock.status.full.dependencies.changed.singular=\ \ 1 dependency changed:\n{1}
45-
lock.status.full.dependencies.changed.multiple=\ \ {0} dependencies changed:\n{1}
45+
lock.status.full.dependencies.changed.multiple=\ \ {0} dependencies changed:\n{1}
46+
47+
# lockfile full status - artifacts ============================================
48+
49+
lock.status.full.artifacts.changed.none=
50+
lock.status.full.artifacts.changed.singular=\ \ 1 dependency artifacts changed:\n{1}
51+
lock.status.full.artifacts.changed.multiple=\ \ {0} dependency artifacts changed:\n{1}

src/main/scala/software/purpledragon/sbt/lock/model/LockFileStatus.scala

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,7 @@ final case class LockFileDiffers(
135135
}
136136

137137
def dumpChanges(changes: Seq[ChangedDependency]): String = {
138-
val table =
139-
new TableFormatter(None, prefix = " ", stripTrailingNewline = true)
138+
val table = new TableFormatter(None, prefix = " ", stripTrailingNewline = true)
140139

141140
changes foreach { change =>
142141
table.addRow(
@@ -153,11 +152,55 @@ final case class LockFileDiffers(
153152
table.toString()
154153
}
155154

156-
if (changedDependencies.nonEmpty) {
155+
val (depChanged, artChanged) =
156+
changedDependencies.partition(change => change.configurationsChanged || change.versionChanged)
157+
158+
if (depChanged.nonEmpty) {
157159
errors += MessageUtil.formatPlural(
158160
"lock.status.full.dependencies.changed",
159-
changedDependencies.size,
160-
dumpChanges(changedDependencies))
161+
depChanged.size,
162+
dumpChanges(depChanged))
163+
}
164+
165+
def dumpArtifactChanges(changes: Seq[ChangedDependency]): String = {
166+
val changesBuilder = new mutable.StringBuilder()
167+
168+
changes foreach { change =>
169+
changesBuilder ++= " "
170+
changesBuilder ++= change.org
171+
changesBuilder ++= ":"
172+
changesBuilder ++= change.name
173+
changesBuilder ++= " ("
174+
change.oldConfigurations.addString(changesBuilder, ",")
175+
changesBuilder ++= ") "
176+
changesBuilder ++= change.oldVersion
177+
changesBuilder ++= ":\n"
178+
179+
val table = new TableFormatter(None, prefix = " ", stripTrailingNewline = false)
180+
181+
change.addedArtifacts foreach { added =>
182+
table.addRow("(added)", added.name, added.hash)
183+
}
184+
185+
change.removedArtifacts foreach { removed =>
186+
table.addRow("(removed)", removed.name, removed.hash)
187+
}
188+
189+
change.changedArtifacts foreach { changed =>
190+
table.addRow("(changed)", changed.name, changed.oldHash, s"-> ${changed.newHash}")
191+
}
192+
193+
changesBuilder ++= table.toString()
194+
}
195+
196+
changesBuilder.toString()
197+
}
198+
199+
if (artChanged.nonEmpty) {
200+
errors += MessageUtil.formatPlural(
201+
"lock.status.full.artifacts.changed",
202+
artChanged.size,
203+
dumpArtifactChanges(artChanged))
161204
}
162205

163206
MessageUtil.formatMessage("lock.status.failed.long", errors.mkString("\n"))

src/main/scala/software/purpledragon/sbt/lock/model/ResolvedArtifact.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ object ResolvedArtifact {
3535
val (artifact, file) = art
3636
val hash = checksumCache.getOrElseUpdate(file, hashFile(file))
3737

38-
val classifier = artifact.classifier.map(c => s"-$c").getOrElse("")
38+
val classifier = artifact.classifier match {
39+
case None | Some("") => ""
40+
case Some(c) => s"-$c"
41+
}
42+
3943
val qualifier = artifact.`type` match {
4044
case "jar" | "bundle" => ""
4145
case q => s"-$q"

src/test/scala/software/purpledragon/sbt/lock/model/LockFileStatusSpec.scala

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,42 @@ class LockFileStatusSpec extends AnyFlatSpec with Matchers {
180180
.toLongReport shouldBe expected
181181
}
182182

183+
it should "render 2 dependency artifacts changed" in {
184+
val expected =
185+
"""Dependency lock check failed:
186+
| 2 dependency artifacts changed:
187+
| com.example:dependency-1 (compile) 1.1:
188+
| (added) artifact-2.jar sha1:07c10d545325e3a6e72e06381afe469fd40eb701
189+
| (removed) artifact-1.jar sha1:2b8b815229aa8a61e483fb4ba0588b8b6c491890
190+
| com.example:dependency-2 (compile) 1.1.2:
191+
| (changed) artifact-a.jar sha1:07c10d545325e3a6e72e06381afe469fd40eb701 -> sha1:cfa4f316351a91bfd95cb0644c6a2c95f52db1fc
192+
|""".stripMargin
193+
194+
LockFileMatches
195+
.withDependencyChanges(
196+
Nil,
197+
Nil,
198+
Seq(
199+
testChangedDependencyArtifacts(
200+
"dependency-1",
201+
"1.1",
202+
added = Seq(ResolvedArtifact("artifact-2.jar", "sha1:07c10d545325e3a6e72e06381afe469fd40eb701")),
203+
removed = Seq(ResolvedArtifact("artifact-1.jar", "sha1:2b8b815229aa8a61e483fb4ba0588b8b6c491890"))
204+
),
205+
testChangedDependencyArtifacts(
206+
"dependency-2",
207+
"1.1.2",
208+
changed = Seq(
209+
ChangedArtifact(
210+
"artifact-a.jar",
211+
"sha1:07c10d545325e3a6e72e06381afe469fd40eb701",
212+
"sha1:cfa4f316351a91bfd95cb0644c6a2c95f52db1fc"))
213+
)
214+
)
215+
)
216+
.toLongReport shouldBe expected
217+
}
218+
183219
it should "render lots of changes" in {
184220
val expected =
185221
"""Dependency lock check failed:
@@ -247,4 +283,25 @@ class LockFileStatusSpec extends AnyFlatSpec with Matchers {
247283
SortedSet.empty,
248284
SortedSet.empty)
249285
}
286+
287+
private def testChangedDependencyArtifacts(
288+
name: String,
289+
version: String,
290+
org: String = "com.example",
291+
added: Seq[ResolvedArtifact] = Nil,
292+
removed: Seq[ResolvedArtifact] = Nil,
293+
changed: Seq[ChangedArtifact] = Nil): ChangedDependency = {
294+
295+
ChangedDependency(
296+
org,
297+
name,
298+
version,
299+
version,
300+
SortedSet("compile"),
301+
SortedSet("compile"),
302+
added.to[SortedSet],
303+
removed.to[SortedSet],
304+
changed.to[SortedSet]
305+
)
306+
}
250307
}

0 commit comments

Comments
 (0)