   }
 
   /// Builds a list of RuleEntry instances using the data in the given set of .tulsiinfo files.
-  private func extractRuleEntriesFromArtifacts(_ files: [String],
+  private func extractRuleEntriesFromArtifacts(_ files: Set<String>,
                                                progressNotifier: ProgressNotifier? = nil) -> [BuildLabel: RuleEntry] {
     let fileManager = FileManager.default
 

        defer { semaphore.signal() }
        processDebugInfo = debugInfo
        if let generatedArtifacts = generatedArtifacts {
          artifacts = generatedArtifacts.filter { $0.hasSuffix(".tulsiinfo") }
        }
    }


                                                               message: "Extracting info for \(targets.count) rules")

    let semaphore = DispatchSemaphore(value: 0)
    var artifacts = Set<String>()
    var processDebugInfo: String? = nil
    let process = bazelAspectProcessForTargets(targets.map({ $0.value }),
                                               aspect: "tulsi_sources_aspect",
