From 2bf5bbd22fc589c83b5ca5813cdb33d64cf782a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 16 Apr 2020 14:14:09 +0200 Subject: [PATCH] Ruby 2.7 compatibility. Resolves: rhbz#1799093 --- ...terlockAwareMonitor-work-in-Ruby-2.7.patch | 54 +++++++++++++++++++ rubygem-activesupport.spec | 20 +++++-- 2 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 rubygem-activesupport-6.1.0-Make-LoadInterlockAwareMonitor-work-in-Ruby-2.7.patch diff --git a/rubygem-activesupport-6.1.0-Make-LoadInterlockAwareMonitor-work-in-Ruby-2.7.patch b/rubygem-activesupport-6.1.0-Make-LoadInterlockAwareMonitor-work-in-Ruby-2.7.patch new file mode 100644 index 0000000..216921a --- /dev/null +++ b/rubygem-activesupport-6.1.0-Make-LoadInterlockAwareMonitor-work-in-Ruby-2.7.patch @@ -0,0 +1,54 @@ +From 4f4f8a705a8e713bceee8cacca52e9bce22e28dc Mon Sep 17 00:00:00 2001 +From: "yuuji.yaginuma" +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 diff --git a/rubygem-activesupport.spec b/rubygem-activesupport.spec index 60d9866..47483ca 100644 --- a/rubygem-activesupport.spec +++ b/rubygem-activesupport.spec @@ -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 - 1:5.2.3-4 +- Ruby 2.7 compatibility. + Resolves: rhbz#1799093 + * Thu Jan 30 2020 Fedora Release Engineering - 1:5.2.3-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild