From 7f25614d71848310c1402f0bb0ef519a26012973 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Thu, 13 Apr 2017 09:27:31 +0100 Subject: [PATCH 1/2] Expose more in RichUpdateReport Fixes #83 --- .../librarymanagement/RichUpdateReport.scala | 45 ++++++++++++++----- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/librarymanagement/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala b/librarymanagement/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala index 12fb4be8d..6a4adc7b2 100644 --- a/librarymanagement/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala +++ b/librarymanagement/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala @@ -3,7 +3,10 @@ package librarymanagement import java.io.File -/** Provides extra methods for filtering the contents of an `UpdateReport` and for obtaining references to a selected subset of the underlying files. */ +/** + * Provides extra methods for filtering the contents of an `UpdateReport` + * and for obtaining references to a selected subset of the underlying files. + */ final class RichUpdateReport(report: UpdateReport) { private[sbt] def recomputeStamps(): UpdateReport = { @@ -15,10 +18,10 @@ final class RichUpdateReport(report: UpdateReport) { import DependencyFilter._ /** Obtains all successfully retrieved files in all configurations and modules. */ - private[sbt] def allFiles: Seq[File] = matching(DependencyFilter.allPass) + def allFiles: Seq[File] = matching(DependencyFilter.allPass) /** Obtains all successfully retrieved files in configurations, modules, and artifacts matching the specified filter. */ - private[sbt] def matching(f: DependencyFilter): Seq[File] = select0(f).distinct + def matching(f: DependencyFilter): Seq[File] = select0(f).distinct /** Obtains all successfully retrieved files matching all provided filters. */ def select(configuration: ConfigurationFilter, module: ModuleFilter, artifact: ArtifactFilter): Seq[File] = @@ -29,17 +32,27 @@ final class RichUpdateReport(report: UpdateReport) { def select(artifact: ArtifactFilter): Seq[File] = select(configurationFilter(), moduleFilter(), artifact) private[this] def select0(f: DependencyFilter): Seq[File] = - for (cReport <- report.configurations; mReport <- cReport.modules; (artifact, file) <- mReport.artifacts if f(cReport.configuration, mReport.module, artifact)) yield { - if (file == null) sys.error("Null file: conf=" + cReport.configuration + ", module=" + mReport.module + ", art: " + artifact) + for { + cReport <- report.configurations + mReport <- cReport.modules + (artifact, file) <- mReport.artifacts + if f(cReport.configuration, mReport.module, artifact) + } yield { + if (file == null) + sys.error(s"Null file: conf=${cReport.configuration}, module=${mReport.module}, art: $artifact") file } /** Constructs a new report that only contains files matching the specified filter.*/ - private[sbt] def filter(f: DependencyFilter): UpdateReport = + def filter(f: DependencyFilter): UpdateReport = moduleReportMap { (configuration, modReport) => modReport - .withArtifacts(modReport.artifacts filter { case (art, file) => f(configuration, modReport.module, art) }) - .withMissingArtifacts(modReport.missingArtifacts filter { art => f(configuration, modReport.module, art) }) + .withArtifacts( + modReport.artifacts filter { case (art, file) => f(configuration, modReport.module, art) } + ) + .withMissingArtifacts( + modReport.missingArtifacts filter { art => f(configuration, modReport.module, art) } + ) } private[sbt] def substitute(f: (String, ModuleID, Vector[(Artifact, File)]) => Vector[(Artifact, File)]): UpdateReport = @@ -50,11 +63,19 @@ final class RichUpdateReport(report: UpdateReport) { .withMissingArtifacts(modReport.missingArtifacts) } - private[sbt] def toSeq: Seq[(String, ModuleID, Artifact, File)] = - for (confReport <- report.configurations; modReport <- confReport.modules; (artifact, file) <- modReport.artifacts) yield (confReport.configuration, modReport.module, artifact, file) + def toSeq: Seq[(String, ModuleID, Artifact, File)] = + for { + confReport <- report.configurations + modReport <- confReport.modules + (artifact, file) <- modReport.artifacts + } yield (confReport.configuration, modReport.module, artifact, file) - private[sbt] def allMissing: Seq[(String, ModuleID, Artifact)] = - for (confReport <- report.configurations; modReport <- confReport.modules; artifact <- modReport.missingArtifacts) yield (confReport.configuration, modReport.module, artifact) + def allMissing: Seq[(String, ModuleID, Artifact)] = + for { + confReport <- report.configurations + modReport <- confReport.modules + artifact <- modReport.missingArtifacts + } yield (confReport.configuration, modReport.module, artifact) private[sbt] def addMissing(f: ModuleID => Seq[Artifact]): UpdateReport = moduleReportMap { (configuration, modReport) => From 40e34b3e8eb27c9920b4505561f15273614ca094 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Thu, 13 Apr 2017 10:08:53 +0100 Subject: [PATCH 2/2] Make RichUpdateReport return Vectors & cuddle sys.error --- .../librarymanagement/RichUpdateReport.scala | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/librarymanagement/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala b/librarymanagement/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala index 6a4adc7b2..1d6e6c473 100644 --- a/librarymanagement/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala +++ b/librarymanagement/src/main/scala/sbt/librarymanagement/RichUpdateReport.scala @@ -18,28 +18,29 @@ final class RichUpdateReport(report: UpdateReport) { import DependencyFilter._ /** Obtains all successfully retrieved files in all configurations and modules. */ - def allFiles: Seq[File] = matching(DependencyFilter.allPass) + def allFiles: Vector[File] = matching(DependencyFilter.allPass) /** Obtains all successfully retrieved files in configurations, modules, and artifacts matching the specified filter. */ - def matching(f: DependencyFilter): Seq[File] = select0(f).distinct + def matching(f: DependencyFilter): Vector[File] = select0(f).distinct /** Obtains all successfully retrieved files matching all provided filters. */ - def select(configuration: ConfigurationFilter, module: ModuleFilter, artifact: ArtifactFilter): Seq[File] = + def select(configuration: ConfigurationFilter, module: ModuleFilter, artifact: ArtifactFilter): Vector[File] = matching(DependencyFilter.make(configuration, module, artifact)) - def select(configuration: ConfigurationFilter): Seq[File] = select(configuration, moduleFilter(), artifactFilter()) - def select(module: ModuleFilter): Seq[File] = select(configurationFilter(), module, artifactFilter()) - def select(artifact: ArtifactFilter): Seq[File] = select(configurationFilter(), moduleFilter(), artifact) + def select(configuration: ConfigurationFilter): Vector[File] = select(configuration, moduleFilter(), artifactFilter()) + def select(module: ModuleFilter): Vector[File] = select(configurationFilter(), module, artifactFilter()) + def select(artifact: ArtifactFilter): Vector[File] = select(configurationFilter(), moduleFilter(), artifact) - private[this] def select0(f: DependencyFilter): Seq[File] = + private[this] def select0(f: DependencyFilter): Vector[File] = for { cReport <- report.configurations mReport <- cReport.modules (artifact, file) <- mReport.artifacts if f(cReport.configuration, mReport.module, artifact) } yield { - if (file == null) + if (file == null) { sys.error(s"Null file: conf=${cReport.configuration}, module=${mReport.module}, art: $artifact") + } file } @@ -63,14 +64,15 @@ final class RichUpdateReport(report: UpdateReport) { .withMissingArtifacts(modReport.missingArtifacts) } - def toSeq: Seq[(String, ModuleID, Artifact, File)] = + def toSeq: Seq[(String, ModuleID, Artifact, File)] = toVector + def toVector: Vector[(String, ModuleID, Artifact, File)] = for { confReport <- report.configurations modReport <- confReport.modules (artifact, file) <- modReport.artifacts } yield (confReport.configuration, modReport.module, artifact, file) - def allMissing: Seq[(String, ModuleID, Artifact)] = + def allMissing: Vector[(String, ModuleID, Artifact)] = for { confReport <- report.configurations modReport <- confReport.modules