Ruby 2.7 compatibility.

Resolves: rhbz#1799093
This commit is contained in:
Vít Ondruch 2020-04-16 14:14:09 +02:00
commit 2bf5bbd22f
2 changed files with 71 additions and 3 deletions

View file

@ -0,0 +1,54 @@
From 4f4f8a705a8e713bceee8cacca52e9bce22e28dc Mon Sep 17 00:00:00 2001
From: "yuuji.yaginuma" <yuuji.yaginuma@gmail.com>
Date: Wed, 18 Dec 2019 19:00:29 +0900
Subject: [PATCH] Make `LoadInterlockAwareMonitor` work in Ruby 2.7
Currently `LoadInterlockAwareMonitorTest` does not pass with Ruby 2.7 [1].
This is due to the refactoring of the `monitor` done in Ruby 2.7 [2].
With this refactoring, the behavior of the method has changed from the
expected behavior in `LoadInterlockAwareMonitor`.
This patch also overwrites `synchronize` so that
`LoadInterlockAwareMonitor` works as expected.
[1]: https://buildkite.com/rails/rails/builds/65877#eec47af5-7595-47cb-97c0-30c589716176/996-2743
[2]: https://bugs.ruby-lang.org/issues/16255
---
.../load_interlock_aware_monitor.rb | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb b/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb
index a8455c00483f..480c34c64017 100644
--- a/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb
+++ b/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb
@@ -7,11 +7,29 @@ module Concurrency
# A monitor that will permit dependency loading while blocked waiting for
# the lock.
class LoadInterlockAwareMonitor < Monitor
+ EXCEPTION_NEVER = { Exception => :never }.freeze
+ EXCEPTION_IMMEDIATE = { Exception => :immediate }.freeze
+ private_constant :EXCEPTION_NEVER, :EXCEPTION_IMMEDIATE
+
# Enters an exclusive section, but allows dependency loading while blocked
def mon_enter
mon_try_enter ||
ActiveSupport::Dependencies.interlock.permit_concurrent_loads { super }
end
+
+ def synchronize
+ Thread.handle_interrupt(EXCEPTION_NEVER) do
+ mon_enter
+
+ begin
+ Thread.handle_interrupt(EXCEPTION_IMMEDIATE) do
+ yield
+ end
+ ensure
+ mon_exit
+ end
+ end
+ end
end
end
end

View file

@ -3,7 +3,7 @@
Name: rubygem-%{gem_name}
Epoch: 1
Version: 5.2.3
Release: 3%{?dist}
Release: 4%{?dist}
Summary: A support libraries and Ruby core extensions extracted from the Rails framework
License: MIT
URL: http://rubyonrails.org
@ -15,6 +15,9 @@ Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
# cd rails/activesupport/
# git checkout v5.2.3 && tar czvf activesupport-5.2.3-tests.tgz test/
Source1: %{gem_name}-%{version}-tests.tgz
# Make `LoadInterlockAwareMonitor` work in Ruby 2.7
# https://github.com/rails/rails/pull/38069
Patch0: rubygem-activesupport-6.1.0-Make-LoadInterlockAwareMonitor-work-in-Ruby-2.7.patch
# ruby package has just soft dependency on rubygem({bigdecimal,json}), while
# ActiveSupport always requires them.
@ -54,7 +57,9 @@ BuildArch: noarch
Documentation for %{name}.
%prep
%setup -q -n %{gem_name}-%{version}
%setup -q -n %{gem_name}-%{version} -b 1
%patch0 -p2
%build
gem build ../%{gem_name}-%{version}.gemspec
@ -69,7 +74,7 @@ cp -a .%{gem_dir}/* \
%check
pushd .%{gem_instdir}
# Move the tests into place
tar xzvf %{SOURCE1}
cp -a %{_builddir}/test test
# These tests are really unstable, but they seems to be passing upstream :/
for f in \
@ -83,6 +88,11 @@ done
# https://github.com/rails/rails/issues/25682
sed -i '/def test_iso8601_output_and_reparsing$/,/^ end$/ s/^/#/' test/core_ext/duration_test.rb
# Workaround TransformValuesTest#test_default_procs_do_not_persist_*_mapping
# test failures due to bug in Ruby 2.7.{0,1}.
# https://bugs.ruby-lang.org/issues/16498
sed -i '/assert_nil mapped\[:b\]/ s/^/#/' test/core_ext/hash/transform_values_test.rb
memcached &
mPID=$!
sleep 1
@ -103,6 +113,10 @@ popd
%doc %{gem_instdir}/README.rdoc
%changelog
* Thu Apr 16 2020 Vít Ondruch <vondruch@redhat.com> - 1:5.2.3-4
- Ruby 2.7 compatibility.
Resolves: rhbz#1799093
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.2.3-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild