Merge pull request #84 from dwijnand/expose-more-RichUpdateReport

Expose more in RichUpdateReport
This commit is contained in:
eugene yokota 2017-04-13 14:31:48 -04:00 committed by GitHub
commit 4e3693179b
1 changed files with 40 additions and 17 deletions

View File

@ -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,31 +18,42 @@ 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: Vector[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): 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] =
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)
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) {
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 +64,20 @@ 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)] = 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)
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: Vector[(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) =>