coverband 6.1.0 → 6.1.1

Sign up to get free protection for your applications and to get access to all the features.
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