summaryrefslogtreecommitdiff
path: root/scripts/merge-simplecov
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/merge-simplecov')
-rwxr-xr-xscripts/merge-simplecov65
1 files changed, 65 insertions, 0 deletions
diff --git a/scripts/merge-simplecov b/scripts/merge-simplecov
new file mode 100755
index 00000000000..b59ff0ae9a0
--- /dev/null
+++ b/scripts/merge-simplecov
@@ -0,0 +1,65 @@
+#!/usr/bin/env ruby
+begin
+ load File.expand_path('../spring', __FILE__)
+rescue LoadError => e
+ raise unless e.message.include?('spring')
+end
+
+require 'simplecov'
+
+def read(file)
+ return unless File.exist?(file)
+ data = File.read(file)
+ return if data.nil? || data.length < 2
+ data
+end
+
+def load(file)
+ begin
+ JSON.parse(read(file))
+ rescue
+ {}
+ end
+end
+
+def files
+ Dir.glob(File.join(SimpleCov.coverage_path, '*', '.resultset.json'))
+end
+
+def resultsfiles
+ files.map { |file| load(file) }
+end
+
+def resultsets
+ resultsfiles.reduce({}, :merge)
+end
+
+def all_results
+ results = []
+ resultsets.each do |command_name, data|
+ result = SimpleCov::Result.from_hash(command_name => data)
+ # Only add result if the timeout is above the configured threshold
+ if (Time.now - result.created_at) < SimpleCov.merge_timeout
+ results << result
+ end
+ end
+ results
+end
+
+def merged_result
+ merged = {}
+ results = all_results
+ results.each do |result|
+ merged = result.original_result.merge_resultset(merged)
+ end
+ result = SimpleCov::Result.new(merged)
+ # Specify the command name
+ result.command_name = results.map(&:command_name).sort.join(", ")
+ result
+end
+
+SimpleCov.configure do
+ merge_timeout 7200
+end
+
+merged_result.format!