ruby 2.7 compatibility - #117

This commit is contained in:
Josh Holtrop 2020-04-16 15:48:45 -04:00
parent 93c5561190
commit b6f0e61052
4 changed files with 37 additions and 6 deletions

View File

@ -5,6 +5,7 @@ require_relative "rscons/cache"
require_relative "rscons/environment" require_relative "rscons/environment"
require_relative "rscons/job_set" require_relative "rscons/job_set"
require_relative "rscons/threaded_command" require_relative "rscons/threaded_command"
require_relative "rscons/util"
require_relative "rscons/varset" require_relative "rscons/varset"
require_relative "rscons/version" require_relative "rscons/version"

View File

@ -1,7 +1,6 @@
require "fileutils" require "fileutils"
require "set" require "set"
require "shellwords" require "shellwords"
require "thwait"
module Rscons module Rscons
# The Environment class is the main programmatic interface to Rscons. It # The Environment class is the main programmatic interface to Rscons. It
@ -1012,10 +1011,7 @@ module Rscons
!thread.alive? !thread.alive?
end end
else else
if threads.empty? Util.wait_for_thread(*threads)
raise "No threads to wait for"
end
ThreadsWait.new(*threads).next_wait
end end
end end

34
lib/rscons/util.rb Normal file
View File

@ -0,0 +1,34 @@
module Rscons
# A collection of stand-alone utility methods.
module Util
class << self
# Wait for any of a number of threads to complete.
#
# @param threads [Array<Thread>]
# Threads to wait for.
#
# @return [Thread]
# The Thread that completed.
def wait_for_thread(*threads)
if threads.empty?
raise "No threads to wait for"
end
queue = Queue.new
threads.each do |thread|
# Create a wait thread for each thread we're waiting for.
Thread.new do
begin
thread.join
ensure
queue.push(thread)
end
end
end
# Wait for any thread to complete.
queue.pop
end
end
end
end

View File

@ -97,7 +97,7 @@ ENV["TERM"] = nil
EOF EOF
end end
stdout, stderr, status = nil, nil, nil stdout, stderr, status = nil, nil, nil
Bundler.with_clean_env do Bundler.with_unbundled_env do
stdout, stderr, status = Open3.capture3(*command) stdout, stderr, status = Open3.capture3(*command)
end end
# Remove output lines generated as a result of the test environment # Remove output lines generated as a result of the test environment