From 575f890f6293dca1ae3e830f1be1bdc2eaee8e43 Mon Sep 17 00:00:00 2001 From: Stefano Bennati Date: Mon, 23 May 2022 12:04:25 +0200 Subject: [PATCH] Analyzer: Remove projects that are also dependencies Local directories that are dependencies can appear in the analyzer results both as packages, e.g. Pub, and projects. After building the results, projects are removed if they match with packages on VCS information and package manager type. This is caused by issue #5365. This is only a workaround which should be replaced by a comprehensive solution for #5365. --- analyzer/src/main/kotlin/Analyzer.kt | 1 + .../src/main/kotlin/AnalyzerResultBuilder.kt | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/analyzer/src/main/kotlin/Analyzer.kt b/analyzer/src/main/kotlin/Analyzer.kt index 7b866041b7b35..872d4129419e3 100644 --- a/analyzer/src/main/kotlin/Analyzer.kt +++ b/analyzer/src/main/kotlin/Analyzer.kt @@ -161,6 +161,7 @@ class Analyzer(private val config: AnalyzerConfiguration, private val labels: Ma } } + analyzerResultBuilder.deduplicateProjects() return state.buildResult() } } diff --git a/analyzer/src/main/kotlin/AnalyzerResultBuilder.kt b/analyzer/src/main/kotlin/AnalyzerResultBuilder.kt index 4c248a9c668d5..643e624cee783 100644 --- a/analyzer/src/main/kotlin/AnalyzerResultBuilder.kt +++ b/analyzer/src/main/kotlin/AnalyzerResultBuilder.kt @@ -107,4 +107,30 @@ class AnalyzerResultBuilder(private val curationProvider: PackageCurationProvide dependencyGraphs[packageManagerName] = graph return this } + + fun deduplicateProjects() { + val packages = this.packages.filter { p -> + p.pkg.vcsProcessed.path != "" + } + val duplicatedProjects = this.projects.filter { prj -> + prj.vcsProcessed.path != "" + }.filter { prj -> + val matchingPackages = packages.filter { p -> + prj.id.type == p.pkg.id.type && + prj.vcsProcessed == p.pkg.vcsProcessed + } + if (matchingPackages.size > 0) { + matchingPackages.map { p -> + log.warn { + "Project ${prj.id.type}:${prj.id.namespace}:${prj.id.name} " + + "resembles package ${p.pkg.id.type}:${p.pkg.id.namespace}:${p.pkg.id.name}" + } + } + } + matchingPackages.size != 0 + } + duplicatedProjects.map { prj -> + this.projects.remove(prj) + } + } }