Skip to content

Commit 529c078

Browse files
committed
Run each spec file in a process to detect missing requires
* Fixes #934.
1 parent 13db80c commit 529c078

File tree

137 files changed

+385
-162
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+385
-162
lines changed

.github/workflows/ci.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
name: CI
22
on: [push, pull_request]
3+
concurrency:
4+
group: ${{ github.ref }}
5+
cancel-in-progress: true
36

47
jobs:
58
build:
@@ -26,3 +29,17 @@ jobs:
2629
bundler-cache: true
2730
- name: Run tests
2831
run: bundle exec rake ci
32+
33+
isolated:
34+
name: "Test isolated"
35+
runs-on: ubuntu-latest
36+
env:
37+
RUBYOPT: '-w'
38+
steps:
39+
- uses: actions/checkout@v3
40+
- uses: ruby/setup-ruby@v1
41+
with:
42+
ruby-version: 3.2
43+
bundler-cache: true
44+
- run: bundle exec rake compile
45+
- run: bundle exec rake spec:isolated

Gemfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ source 'https://rubygems.org'
22

33
require File.join(File.dirname(__FILE__), 'lib/concurrent-ruby/concurrent/version')
44
require File.join(File.dirname(__FILE__ ), 'lib/concurrent-ruby-edge/concurrent/edge/version')
5-
require File.join(File.dirname(__FILE__ ), 'lib/concurrent-ruby/concurrent/utility/engine')
65

76
no_path = ENV['NO_PATH']
87
options = no_path ? {} : { path: '.' }

Rakefile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,19 @@ begin
9191
desc 'executed in CI'
9292
task :ci => [:compile, 'spec:ci']
9393

94+
desc 'run each spec file in a separate process to help find missing requires'
95+
task 'spec:isolated' do
96+
glob = "#{ENV['DIR'] || 'spec'}/**/*_spec.rb"
97+
from = ENV['FROM']
98+
env = { 'ISOLATED' => 'true' }
99+
Dir[glob].each do |spec|
100+
next if from and from != spec
101+
from = nil if from == spec
102+
103+
sh env, 'rspec', spec
104+
end
105+
end
106+
94107
task :default => [:clobber, :compile, :spec]
95108
rescue LoadError => e
96109
puts 'RSpec is not installed, skipping test task definitions: ' + e.message

concurrent-ruby.gemspec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
require File.join(File.dirname(__FILE__ ), 'lib/concurrent-ruby/concurrent/version')
2-
require File.join(File.dirname(__FILE__ ), 'lib/concurrent-ruby/concurrent/utility/engine')
32

43
Gem::Specification.new do |s|
54
git_files = `git ls-files`.split("\n")

docs-source/actor/format.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
input_paths.each_with_index do |input_path, i|
1414

1515
pid = fork do
16-
require File.join(root, 'init.rb')
16+
require_relative 'init'
1717

1818
begin
1919
output_path = input_path.gsub /\.in\.rb$/, '.out.rb'

docs-source/tvar.md

Lines changed: 2 additions & 2 deletions

examples/benchmark_map.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env ruby
22

3-
require "benchmark"
4-
require "concurrent"
3+
require 'benchmark'
4+
require 'concurrent'
55

66
hash = {}
77
map = Concurrent::Map.new

examples/format.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
input_paths.each_with_index do |input_path, i|
1313

1414
pid = fork do
15-
require_relative 'init.rb'
15+
require_relative 'init'
1616

1717
begin
1818
output_path = input_path.gsub /\.in\.rb$/, '.out.rb'

lib/concurrent-ruby-edge/concurrent/actor.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
# NOTE: finer grained than require 'concurrent/actor' not supported
2+
13
require 'concurrent/configuration'
24
require 'concurrent/executor/serialized_execution'
3-
require 'concurrent/synchronization'
45
require 'concurrent/edge/promises'
56

67
module Concurrent

lib/concurrent-ruby-edge/concurrent/channel/tick.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'concurrent/synchronization'
1+
require 'concurrent/synchronization/object'
22
require 'concurrent/utility/monotonic_time'
33

44
module Concurrent

lib/concurrent-ruby-edge/concurrent/edge/cancellation.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
require 'concurrent/concern/deprecation'
2+
require 'concurrent/synchronization/object'
3+
require 'concurrent/promises'
24

35
module Concurrent
46

lib/concurrent-ruby-edge/concurrent/edge/channel.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
require 'concurrent/synchronization/object'
2+
require 'concurrent/edge/promises'
3+
14
# @!macro warn.edge
25
module Concurrent
36
module Promises

lib/concurrent-ruby-edge/concurrent/edge/erlang_actor.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
require 'set'
2+
require 'concurrent/atomic/count_down_latch'
3+
require 'concurrent/concern/logging'
4+
require 'concurrent/edge/channel'
5+
require 'concurrent/errors'
6+
require 'concurrent/promises'
7+
require 'concurrent/synchronization/object'
8+
19
module Concurrent
210

311
# This module provides actor abstraction that has same behaviour as Erlang actor.

lib/concurrent-ruby-edge/concurrent/edge/lock_free_queue.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'concurrent/synchronization/object'
2+
13
module Concurrent
24

35
# @!visibility private

lib/concurrent-ruby-edge/concurrent/edge/processing_actor.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
require 'concurrent/synchronization/object'
2+
require 'concurrent/promises'
3+
require 'concurrent/edge/channel'
4+
15
module Concurrent
26

37
# A new implementation of actor which also simulates the process, therefore it can be used

lib/concurrent-ruby-edge/concurrent/edge/throttle.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
require 'concurrent/edge/lock_free_queue'
2+
require 'concurrent/promises'
3+
require 'concurrent/synchronization/object'
4+
15
module Concurrent
26
# A tool managing concurrency level of tasks.
37
# The maximum capacity is set in constructor.

lib/concurrent-ruby-edge/concurrent/executor/wrapping_executor.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
require 'concurrent/synchronization/object'
2+
require 'concurrent/executor/executor_service'
3+
14
module Concurrent
25

36
# A delegating executor which modifies each task with arguments

lib/concurrent-ruby/concurrent/agent.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
require 'concurrent/configuration'
22
require 'concurrent/atomic/atomic_reference'
3+
require 'concurrent/atomic/count_down_latch'
34
require 'concurrent/atomic/thread_local_var'
45
require 'concurrent/collection/copy_on_write_observer_set'
56
require 'concurrent/concern/observable'
6-
require 'concurrent/synchronization'
7+
require 'concurrent/synchronization/lockable_object'
78

89
module Concurrent
910

lib/concurrent-ruby/concurrent/atom.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
require 'concurrent/atomic/atomic_reference'
22
require 'concurrent/collection/copy_on_notify_observer_set'
33
require 'concurrent/concern/observable'
4-
require 'concurrent/synchronization'
4+
require 'concurrent/synchronization/object'
55

66
# @!macro thread_safe_variable_comparison
77
#

lib/concurrent-ruby/concurrent/atomic/atomic_markable_reference.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'concurrent/synchronization/object'
2+
13
module Concurrent
24
# An atomic reference which maintains an object reference along with a mark bit
35
# that can be updated atomically.

lib/concurrent-ruby/concurrent/atomic/cyclic_barrier.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'concurrent/synchronization'
1+
require 'concurrent/synchronization/lockable_object'
22
require 'concurrent/utility/native_integer'
33

44
module Concurrent

lib/concurrent-ruby/concurrent/atomic/event.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
require 'thread'
2-
require 'concurrent/synchronization'
2+
require 'concurrent/synchronization/lockable_object'
33

44
module Concurrent
55

lib/concurrent-ruby/concurrent/atomic/mutex_count_down_latch.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'concurrent/synchronization'
1+
require 'concurrent/synchronization/lockable_object'
22
require 'concurrent/utility/native_integer'
33

44
module Concurrent

lib/concurrent-ruby/concurrent/atomic/mutex_semaphore.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'concurrent/synchronization'
1+
require 'concurrent/synchronization/lockable_object'
22
require 'concurrent/utility/native_integer'
33

44
module Concurrent

lib/concurrent-ruby/concurrent/atomic/read_write_lock.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
require 'thread'
22
require 'concurrent/atomic/atomic_fixnum'
33
require 'concurrent/errors'
4-
require 'concurrent/synchronization'
4+
require 'concurrent/synchronization/object'
5+
require 'concurrent/synchronization/lock'
56

67
module Concurrent
78

lib/concurrent-ruby/concurrent/atomic/reentrant_read_write_lock.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
require 'thread'
22
require 'concurrent/atomic/atomic_reference'
3+
require 'concurrent/atomic/atomic_fixnum'
34
require 'concurrent/errors'
4-
require 'concurrent/synchronization'
5+
require 'concurrent/synchronization/object'
6+
require 'concurrent/synchronization/lock'
57
require 'concurrent/atomic/thread_local_var'
68

79
module Concurrent

lib/concurrent-ruby/concurrent/atomic/semaphore.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
require 'concurrent/atomic/mutex_semaphore'
2-
require 'concurrent/synchronization'
32

43
module Concurrent
54

lib/concurrent-ruby/concurrent/collection/copy_on_notify_observer_set.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'concurrent/synchronization'
1+
require 'concurrent/synchronization/lockable_object'
22

33
module Concurrent
44
module Collection

lib/concurrent-ruby/concurrent/collection/copy_on_write_observer_set.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'concurrent/synchronization'
1+
require 'concurrent/synchronization/lockable_object'
22

33
module Concurrent
44
module Collection

lib/concurrent-ruby/concurrent/configuration.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require 'concurrent/errors'
44
require 'concurrent/concern/deprecation'
55
require 'concurrent/executor/immediate_executor'
6+
require 'concurrent/executor/fixed_thread_pool'
67
require 'concurrent/executor/cached_thread_pool'
78
require 'concurrent/utility/processor_counter'
89

lib/concurrent-ruby/concurrent/delay.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
require 'thread'
22
require 'concurrent/concern/obligation'
33
require 'concurrent/executor/immediate_executor'
4-
require 'concurrent/synchronization'
4+
require 'concurrent/synchronization/lockable_object'
55

66
module Concurrent
77

@@ -67,7 +67,7 @@ def initialize(opts = {}, &block)
6767

6868
# Return the value this object represents after applying the options
6969
# specified by the `#set_deref_options` method. If the delayed operation
70-
# raised an exception this method will return nil. The execption object
70+
# raised an exception this method will return nil. The exception object
7171
# can be accessed via the `#reason` method.
7272
#
7373
# @param [Numeric] timeout the maximum number of seconds to wait

lib/concurrent-ruby/concurrent/executor/abstract_executor_service.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
require 'concurrent/errors'
22
require 'concurrent/concern/deprecation'
33
require 'concurrent/executor/executor_service'
4-
require 'concurrent/synchronization'
4+
require 'concurrent/synchronization/lockable_object'
55

66
module Concurrent
77

lib/concurrent-ruby/concurrent/executor/java_executor_service.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
if Concurrent.on_jruby?
1+
require 'concurrent/utility/engine'
22

3+
if Concurrent.on_jruby?
34
require 'concurrent/errors'
4-
require 'concurrent/utility/engine'
55
require 'concurrent/executor/abstract_executor_service'
66

77
module Concurrent

lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'concurrent/synchronization'
1+
require 'concurrent/synchronization/lockable_object'
22

33
module Concurrent
44

lib/concurrent-ruby/concurrent/executor/serialized_execution.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
require 'concurrent/errors'
22
require 'concurrent/concern/logging'
3-
require 'concurrent/synchronization'
3+
require 'concurrent/synchronization/lockable_object'
44

55
module Concurrent
66

lib/concurrent-ruby/concurrent/executor/simple_executor_service.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
require 'concurrent/atomics'
1+
require 'concurrent/atomic/atomic_boolean'
2+
require 'concurrent/atomic/atomic_fixnum'
3+
require 'concurrent/atomic/event'
24
require 'concurrent/executor/executor_service'
5+
require 'concurrent/executor/ruby_executor_service'
36

47
module Concurrent
58

lib/concurrent-ruby/concurrent/immutable_struct.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
require 'concurrent/synchronization/abstract_struct'
2-
require 'concurrent/synchronization'
2+
require 'concurrent/synchronization/lockable_object'
33

44
module Concurrent
55

lib/concurrent-ruby/concurrent/ivar.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
require 'concurrent/collection/copy_on_write_observer_set'
44
require 'concurrent/concern/obligation'
55
require 'concurrent/concern/observable'
6-
require 'concurrent/synchronization'
6+
require 'concurrent/executor/safe_task_executor'
7+
require 'concurrent/synchronization/lockable_object'
78

89
module Concurrent
910

lib/concurrent-ruby/concurrent/map.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
require 'thread'
22
require 'concurrent/constants'
3-
require 'concurrent/synchronization'
43
require 'concurrent/utility/engine'
54

65
module Concurrent

lib/concurrent-ruby/concurrent/maybe.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'concurrent/synchronization'
1+
require 'concurrent/synchronization/object'
22

33
module Concurrent
44

lib/concurrent-ruby/concurrent/mutable_struct.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
require 'concurrent/synchronization/abstract_struct'
2-
require 'concurrent/synchronization'
2+
require 'concurrent/synchronization/lockable_object'
33

44
module Concurrent
55

lib/concurrent-ruby/concurrent/mvar.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
require 'concurrent/concern/dereferenceable'
2-
require 'concurrent/synchronization'
2+
require 'concurrent/synchronization/object'
33

44
module Concurrent
55

lib/concurrent-ruby/concurrent/promise.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ module Concurrent
6666
# Start by requiring promises
6767
#
6868
# ```ruby
69-
# require 'concurrent'
69+
# require 'concurrent/promise'
7070
# ```
7171
#
7272
# Then create one

lib/concurrent-ruby/concurrent/promises.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
require 'concurrent/synchronization'
1+
require 'concurrent/synchronization/object'
22
require 'concurrent/atomic/atomic_boolean'
33
require 'concurrent/atomic/atomic_fixnum'
44
require 'concurrent/collection/lock_free_stack'
5+
require 'concurrent/configuration'
56
require 'concurrent/errors'
67
require 'concurrent/re_include'
78

0 commit comments

Comments
 (0)