coverband 6.1.0 → 6.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 21e62f4add1bcd44cacd630e37e291a38ecfb924d8fa48698ecbe4ba69a99471
4
- data.tar.gz: 4cc4dfd1289bdf13f77c78a7deb399c18075ec53a835abb45fa11011d0815bd4
3
+ metadata.gz: ed2b063179cbc773c9b3b8fab3403820f9855c32a9de007c347b58873eecf13a
4
+ data.tar.gz: 7968b26ac22e3209b0bf2a9baabdfe107ed9029a0d4557eea5b80c22439e3278
5
5
  SHA512:
6
- metadata.gz: 2bcf294b5d07fc508b1468b0e3a2d993d15b1dae067bd147ca1d55ebc444cf6f7157fbd6e5afee205a7fa9e3648bee9fdab66cec6573ff31605c417346c858a3
7
- data.tar.gz: 282523aea85ea90943c6a8bbf595a3c135f7a95534ac2046ccfeb379cea252ad4889b3e31799de8917b3b989a9492f55fee032f302f8aa8a8c619e870941c79c
6
+ metadata.gz: 3bccf2dbc8e92d5980365a99b5ae2852fd8e04d224202a58e3a8490991b88eb88a881fbf620e4ea60d66cd4714a70f11a8015ebd96aa772a65a35e1fb642ea24
7
+ data.tar.gz: 784f5e0905989f865199261270072c397e520b2269ed387f0ecd1276ef5a7395fc5d4de7ec9990aceeda1cc883778bcfcf4c7c2260c792e81557914298778d87
data/changes.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### Coverband 6.1.1
2
+
3
+ * Performance fix making paged report loading 10X faster
4
+
1
5
  ### Coverband 6.1.0
2
6
 
3
7
  This release has a number of smaller fixes and improvements. It includes a sizable refactoring around the UI which should simplify improvements going forward. This release is mostly targetting large projects with 6K+ ruby files, use the new `config.paged_reporting = true` option with the HashRedisStore to enable paged reporting for large projects. The HashRedisStore now also includes the last time a line in a file was executed.
data/coverband.gemspec CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency "memory_profiler"
37
37
  # breaking change in minitest and mocha...
38
38
  # note: we are also adding 'spy' as mocha doesn't want us to spy on redis calls...
39
+ spec.add_development_dependency "spy"
39
40
  # ^^^ probably need a large test cleanup refactor
40
41
  spec.add_development_dependency "minitest", "= 5.18.1"
41
42
  spec.add_development_dependency "minitest-fork_executor"
@@ -231,14 +231,14 @@ module Coverband
231
231
  end
232
232
  end
233
233
 
234
+ # NOTE: This is kind of hacky, we find all the matching eager loading data
235
+ # for current page of runtime data.
234
236
  eager_key_pre = key_prefix(Coverband::EAGER_TYPE)
235
237
  runtime_key_pre = key_prefix(Coverband::RUNTIME_TYPE)
236
- matched_file_set = files_set(Coverband::EAGER_TYPE)
237
- .select do |eager_key, _val|
238
- runtime_file_set.any? do |runtime_key|
239
- (eager_key.sub(eager_key_pre, "") == runtime_key.sub(runtime_key_pre, ""))
240
- end
241
- end || []
238
+ matched_file_set = runtime_file_set.map do |runtime_key|
239
+ runtime_key.sub(runtime_key_pre, eager_key_pre)
240
+ end
241
+
242
242
  hash_data[Coverband::EAGER_TYPE] = matched_file_set.each_slice(page_size).flat_map do |key_batch|
243
243
  @redis.pipelined do |pipeline|
244
244
  key_batch.each do |key|
@@ -246,6 +246,7 @@ module Coverband
246
246
  end
247
247
  end
248
248
  end
249
+
249
250
  hash_data[Coverband::RUNTIME_TYPE] = hash_data[Coverband::RUNTIME_TYPE].each_with_object({}) do |data_from_redis, hash|
250
251
  add_coverage_for_file(data_from_redis, hash)
251
252
  end
@@ -5,5 +5,5 @@
5
5
  # use format "4.2.1.rc.1" ~> 4.2.1.rc to prerelease versions like v4.2.1.rc.2 and v4.2.1.rc.3
6
6
  ###
7
7
  module Coverband
8
- VERSION = "6.1.0"
8
+ VERSION = "6.1.1"
9
9
  end
@@ -242,4 +242,52 @@ class HashRedisStoreTest < Minitest::Test
242
242
  @store.coverage["./dog.rb"]
243
243
  )
244
244
  end
245
+
246
+ def test_split_coverage
247
+ @store = Coverband::Adapters::HashRedisStore.new(
248
+ @redis,
249
+ redis_namespace: "coverband_test",
250
+ relative_file_converter: MockRelativeFileConverter
251
+ )
252
+
253
+ mock_file_hash
254
+ yesterday = DateTime.now.prev_day.to_time
255
+ mock_time(yesterday)
256
+
257
+ @store.type = :eager_loading
258
+ data = {
259
+ "app_path/dog.rb" => [0, nil, 1]
260
+ }
261
+ @store.save_report(data)
262
+
263
+ @store.type = :runtime
264
+ @store.save_report(
265
+ "app_path/dog.rb" => [0, 1, 2]
266
+ )
267
+ redis_pipelined = Spy.on(@redis, :pipelined).and_call_through
268
+ assert_equal(
269
+ {
270
+ runtime: {
271
+ "./dog.rb" => {
272
+ "first_updated_at" => yesterday.to_i,
273
+ "last_updated_at" => yesterday.to_i,
274
+ "file_hash" => "abcd",
275
+ "data" => [0, 1, 2],
276
+ "timedata" => [nil, Time.at(yesterday.to_i), Time.at(yesterday.to_i)]
277
+ }
278
+ },
279
+ eager_loading: {
280
+ "./dog.rb" => {
281
+ "first_updated_at" => yesterday.to_i,
282
+ "last_updated_at" => nil,
283
+ "file_hash" => "abcd",
284
+ "data" => [0, nil, 1],
285
+ "timedata" => [nil, nil, Time.at(yesterday.to_i)]
286
+ }
287
+ }
288
+ },
289
+ @store.split_coverage([Coverband::RUNTIME_TYPE, Coverband::EAGER_TYPE], {}, {page: 1})
290
+ )
291
+ assert_equal 2, redis_pipelined.calls.count
292
+ end
245
293
  end
data/test/test_helper.rb CHANGED
@@ -35,6 +35,7 @@ require "coverband/utils/results"
35
35
  require "coverband/reporters/html_report"
36
36
  require "coverband/reporters/json_report"
37
37
  require "webmock/minitest"
38
+ require "spy/integration"
38
39
 
39
40
  require_relative "unique_files"
40
41
  $VERBOSE = original_verbosity
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coverband
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.0
4
+ version: 6.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Mayer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-04-21 00:00:00.000000000 Z
12
+ date: 2024-04-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: benchmark-ips
@@ -67,6 +67,20 @@ dependencies:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: spy
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
70
84
  - !ruby/object:Gem::Dependency
71
85
  name: minitest
72
86
  requirement: !ruby/object:Gem::Requirement