Compare commits
2 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
098739b2dd | ||
|
|
2bf5bbd22f |
3 changed files with 71 additions and 139 deletions
|
|
@ -1,136 +0,0 @@
|
||||||
From 0fcb921a65e615c301450d7820b03473acd53898 Mon Sep 17 00:00:00 2001
|
|
||||||
From: utilum <oz@utilum.com>
|
|
||||||
Date: Sun, 20 May 2018 21:22:03 +0200
|
|
||||||
Subject: [PATCH] Allow Range#=== and Range#cover? on Range
|
|
||||||
|
|
||||||
ruby/ruby@989e07c features switching `Range#===` to use internal `r_cover_p`
|
|
||||||
instead of rubyland `include?`. This breaks expected behavior of
|
|
||||||
`ActiveSupport::CoreExt::Range` documented since at least 8b67a02.
|
|
||||||
|
|
||||||
This patch adds overrides on `Range#cover?` and `Range#===` and places all
|
|
||||||
three in a single module, `CompareWithRange`.
|
|
||||||
|
|
||||||
*Requiring core_ext/range/include_range now causes a deprecation warnning*
|
|
||||||
---
|
|
||||||
.../lib/active_support/core_ext/range.rb | 2 +-
|
|
||||||
.../core_ext/range/compare_range.rb | 61 +++++++++++++++++++
|
|
||||||
.../core_ext/range/include_range.rb | 28 ++-------
|
|
||||||
3 files changed, 68 insertions(+), 23 deletions(-)
|
|
||||||
create mode 100644 activesupport/lib/active_support/core_ext/range/compare_range.rb
|
|
||||||
|
|
||||||
diff --git a/activesupport/lib/active_support/core_ext/range.rb b/activesupport/lib/active_support/core_ext/range.rb
|
|
||||||
index 4074e91d17d7..78814fd18961 100644
|
|
||||||
--- a/activesupport/lib/active_support/core_ext/range.rb
|
|
||||||
+++ b/activesupport/lib/active_support/core_ext/range.rb
|
|
||||||
@@ -1,7 +1,7 @@
|
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require "active_support/core_ext/range/conversions"
|
|
||||||
-require "active_support/core_ext/range/include_range"
|
|
||||||
+require "active_support/core_ext/range/compare_range"
|
|
||||||
require "active_support/core_ext/range/include_time_with_zone"
|
|
||||||
require "active_support/core_ext/range/overlaps"
|
|
||||||
require "active_support/core_ext/range/each"
|
|
||||||
diff --git a/activesupport/lib/active_support/core_ext/range/compare_range.rb b/activesupport/lib/active_support/core_ext/range/compare_range.rb
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..704041f6de88
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/activesupport/lib/active_support/core_ext/range/compare_range.rb
|
|
||||||
@@ -0,0 +1,61 @@
|
|
||||||
+# frozen_string_literal: true
|
|
||||||
+
|
|
||||||
+module ActiveSupport
|
|
||||||
+ module CompareWithRange #:nodoc:
|
|
||||||
+ # Extends the default Range#=== to support range comparisons.
|
|
||||||
+ # (1..5) === (1..5) # => true
|
|
||||||
+ # (1..5) === (2..3) # => true
|
|
||||||
+ # (1..5) === (2..6) # => false
|
|
||||||
+ #
|
|
||||||
+ # The native Range#=== behavior is untouched.
|
|
||||||
+ # ('a'..'f') === ('c') # => true
|
|
||||||
+ # (5..9) === (11) # => false
|
|
||||||
+ def ===(value)
|
|
||||||
+ if value.is_a?(::Range)
|
|
||||||
+ # 1...10 includes 1..9 but it does not include 1..10.
|
|
||||||
+ operator = exclude_end? && !value.exclude_end? ? :< : :<=
|
|
||||||
+ super(value.first) && value.last.send(operator, last)
|
|
||||||
+ else
|
|
||||||
+ super
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
+ # Extends the default Range#include? to support range comparisons.
|
|
||||||
+ # (1..5).include?(1..5) # => true
|
|
||||||
+ # (1..5).include?(2..3) # => true
|
|
||||||
+ # (1..5).include?(2..6) # => false
|
|
||||||
+ #
|
|
||||||
+ # The native Range#include? behavior is untouched.
|
|
||||||
+ # ('a'..'f').include?('c') # => true
|
|
||||||
+ # (5..9).include?(11) # => false
|
|
||||||
+ def include?(value)
|
|
||||||
+ if value.is_a?(::Range)
|
|
||||||
+ # 1...10 includes 1..9 but it does not include 1..10.
|
|
||||||
+ operator = exclude_end? && !value.exclude_end? ? :< : :<=
|
|
||||||
+ super(value.first) && value.last.send(operator, last)
|
|
||||||
+ else
|
|
||||||
+ super
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+
|
|
||||||
+ # Extends the default Range#cover? to support range comparisons.
|
|
||||||
+ # (1..5).cover?(1..5) # => true
|
|
||||||
+ # (1..5).cover?(2..3) # => true
|
|
||||||
+ # (1..5).cover?(2..6) # => false
|
|
||||||
+ #
|
|
||||||
+ # The native Range#cover? behavior is untouched.
|
|
||||||
+ # ('a'..'f').cover?('c') # => true
|
|
||||||
+ # (5..9).cover?(11) # => false
|
|
||||||
+ def cover?(value)
|
|
||||||
+ if value.is_a?(::Range)
|
|
||||||
+ # 1...10 covers 1..9 but it does not cover 1..10.
|
|
||||||
+ operator = exclude_end? && !value.exclude_end? ? :< : :<=
|
|
||||||
+ super(value.first) && value.last.send(operator, last)
|
|
||||||
+ else
|
|
||||||
+ super
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+ end
|
|
||||||
+end
|
|
||||||
+
|
|
||||||
+Range.prepend(ActiveSupport::CompareWithRange)
|
|
||||||
diff --git a/activesupport/lib/active_support/core_ext/range/include_range.rb b/activesupport/lib/active_support/core_ext/range/include_range.rb
|
|
||||||
index 7ba1011921ba..2da2c587a31f 100644
|
|
||||||
--- a/activesupport/lib/active_support/core_ext/range/include_range.rb
|
|
||||||
+++ b/activesupport/lib/active_support/core_ext/range/include_range.rb
|
|
||||||
@@ -1,25 +1,9 @@
|
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
-module ActiveSupport
|
|
||||||
- module IncludeWithRange #:nodoc:
|
|
||||||
- # Extends the default Range#include? to support range comparisons.
|
|
||||||
- # (1..5).include?(1..5) # => true
|
|
||||||
- # (1..5).include?(2..3) # => true
|
|
||||||
- # (1..5).include?(2..6) # => false
|
|
||||||
- #
|
|
||||||
- # The native Range#include? behavior is untouched.
|
|
||||||
- # ('a'..'f').include?('c') # => true
|
|
||||||
- # (5..9).include?(11) # => false
|
|
||||||
- def include?(value)
|
|
||||||
- if value.is_a?(::Range)
|
|
||||||
- # 1...10 includes 1..9 but it does not include 1..10.
|
|
||||||
- operator = exclude_end? && !value.exclude_end? ? :< : :<=
|
|
||||||
- super(value.first) && value.last.send(operator, last)
|
|
||||||
- else
|
|
||||||
- super
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
-end
|
|
||||||
+require "active_support/deprecation"
|
|
||||||
|
|
||||||
-Range.prepend(ActiveSupport::IncludeWithRange)
|
|
||||||
+ActiveSupport::Deprecation.warn "You have required `active_support/core_ext/range/include_range`. " \
|
|
||||||
+"This file will be removed in Rails 6.1. You should require `active_support/core_ext/range/compare_range` " \
|
|
||||||
+ "instead."
|
|
||||||
+
|
|
||||||
+require "active_support/core_ext/range/compare_range"
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Name: rubygem-%{gem_name}
|
Name: rubygem-%{gem_name}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 5.2.3
|
Version: 5.2.3
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
Summary: A support libraries and Ruby core extensions extracted from the Rails framework
|
Summary: A support libraries and Ruby core extensions extracted from the Rails framework
|
||||||
License: MIT
|
License: MIT
|
||||||
URL: http://rubyonrails.org
|
URL: http://rubyonrails.org
|
||||||
|
|
@ -15,6 +15,9 @@ Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
|
||||||
# cd rails/activesupport/
|
# cd rails/activesupport/
|
||||||
# git checkout v5.2.3 && tar czvf activesupport-5.2.3-tests.tgz test/
|
# git checkout v5.2.3 && tar czvf activesupport-5.2.3-tests.tgz test/
|
||||||
Source1: %{gem_name}-%{version}-tests.tgz
|
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
|
# ruby package has just soft dependency on rubygem({bigdecimal,json}), while
|
||||||
# ActiveSupport always requires them.
|
# ActiveSupport always requires them.
|
||||||
|
|
@ -54,7 +57,9 @@ BuildArch: noarch
|
||||||
Documentation for %{name}.
|
Documentation for %{name}.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{gem_name}-%{version}
|
%setup -q -n %{gem_name}-%{version} -b 1
|
||||||
|
|
||||||
|
%patch0 -p2
|
||||||
|
|
||||||
%build
|
%build
|
||||||
gem build ../%{gem_name}-%{version}.gemspec
|
gem build ../%{gem_name}-%{version}.gemspec
|
||||||
|
|
@ -69,7 +74,7 @@ cp -a .%{gem_dir}/* \
|
||||||
%check
|
%check
|
||||||
pushd .%{gem_instdir}
|
pushd .%{gem_instdir}
|
||||||
# Move the tests into place
|
# 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 :/
|
# These tests are really unstable, but they seems to be passing upstream :/
|
||||||
for f in \
|
for f in \
|
||||||
|
|
@ -83,6 +88,11 @@ done
|
||||||
# https://github.com/rails/rails/issues/25682
|
# https://github.com/rails/rails/issues/25682
|
||||||
sed -i '/def test_iso8601_output_and_reparsing$/,/^ end$/ s/^/#/' test/core_ext/duration_test.rb
|
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 &
|
memcached &
|
||||||
mPID=$!
|
mPID=$!
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
@ -103,6 +113,10 @@ popd
|
||||||
%doc %{gem_instdir}/README.rdoc
|
%doc %{gem_instdir}/README.rdoc
|
||||||
|
|
||||||
%changelog
|
%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
|
* 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
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue