Skip to content
Snippets Groups Projects
Commit 1464532c authored by Jakub Jirutka's avatar Jakub Jirutka :flag_ua:
Browse files

community/ruby-pathutil: fix compatibility with ruby 3.1

parent 2bb3760e
No related branches found
No related tags found
1 merge request!32751main/ruby: upgrade to 3.1.1
......@@ -11,7 +11,8 @@ license="MIT"
depends="ruby ruby-forwardable-extended"
checkdepends="ruby-rspec ruby-safe_yaml"
source="https://github.com/envygeeks/pathutil/archive/v$pkgver/$_gemname-$pkgver.tar.gz
fix-ruby-keyword-parameter.patch::https://github.com/envygeeks/pathutil/commit/3451a10c362fc867b20c7e471a551b31c40a0246.patch
fix-ruby-keyword-parameter.patch
fix-ruby-3.1-compat.patch
tests-skip-broken.patch
tests-remove-unnecessary-requires.patch
gemspec.patch
......@@ -44,7 +45,8 @@ package() {
sha512sums="
d06daf365b94dacd33966f3928a53f0f00d2fca7b9f6348a7efd2b55ab5ba937459e5bd78fde241f30749a1ae55e4ae3ba1ed8945b5333464e7d3ce9666cd054 pathutil-0.16.2.tar.gz
cc9f7f94b5a830c6f377e5414da317492caf6b5bd89ee8c414753c09c427b2a87852ce8767effacfd0af2ca260c8b05e322e7772b7cc786c4f4531bcf8107cc2 fix-ruby-keyword-parameter.patch
f83401da2c498b35749740ffe830e9d311f125c322624eb36bd494b590d56d041c90681193e9b6a0ce167f6349a12809a6dff292f01ac7508f1ea507a857ed60 fix-ruby-keyword-parameter.patch
4080215d73031945e19d64df0fe5bd76941032c1cd863df29bd4c9b0c19370ed3b07d424ce1f27fc1723b7bc104948cf3a37f0dd8f99df15946584a9ed83a060 fix-ruby-3.1-compat.patch
1e6433b9403035bc13a51e54683d703842a446afa887a5068a719fd301a6a1ca02e45929cc6a5728870990fbcf70ffd49abc9fe28c939a59f830972eca1c3732 tests-skip-broken.patch
c3f2a2bda0daaae245168b352510d054594e1b739899a629ee6322f7f8eb1a0d561b4d431d1e38420746f6d60e0887e2719a14e3354163a1a8cc5fc141c55a7b tests-remove-unnecessary-requires.patch
3e6102cab755624de59d925da8031a0c774052cbb85977a93ca6b45436192152e53b61f9d125898ab47e7761b47ae00f0da5210c229c3ec4ae57005bb5391e72 gemspec.patch
......
Patch-Source: https://github.com/envygeeks/pathutil/pull/7 (updated)
--
From cd4d3694ef515fe1c184e1d00d51c1bfdc85aa44 Mon Sep 17 00:00:00 2001
From: Jakub Jirutka <jakub@jirutka.cz>
Date: Sun, 3 Apr 2022 20:20:44 +0200
Subject: [PATCH 1/2] Fix usage of YAML.safe_load for compatibility with Ruby
>=2.4
YAML.safe_load in Ruby 3.1.1 doesn't accept deprecated positional parameters anymore:
1) Pathutil::Helpers#load_yaml should be able to parse YAML
Failure/Error:
YAML.safe_load(
data,
whitelist_classes,
whitelist_symbols,
aliases
)
ArgumentError:
wrong number of arguments (given 4, expected 1)
# ./lib/pathutil/helpers.rb:44:in `load_yaml'
# ./spec/tests/lib/pathutil/helpers_spec.rb:25:in `block (3 levels) in <top (required)>'
---
lib/pathutil/helpers.rb | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/pathutil/helpers.rb b/lib/pathutil/helpers.rb
index 7398008..e777c0d 100644
--- a/lib/pathutil/helpers.rb
+++ b/lib/pathutil/helpers.rb
@@ -43,9 +43,9 @@ class Pathutil
else
YAML.safe_load(
data,
- whitelist_classes,
- whitelist_symbols,
- aliases
+ permitted_classes: whitelist_classes,
+ permitted_symbols: whitelist_symbols,
+ aliases: aliases
)
end
end
--
2.16.4
From 96fe1d9812f82f3bfd6f6a9fdd5b5f2e41e899f9 Mon Sep 17 00:00:00 2001
From: Jakub Jirutka <jakub@jirutka.cz>
Date: Sun, 3 Apr 2022 20:35:50 +0200
Subject: [PATCH 2/2] Remove deprecated SafeYAML support
SafeYAML has been deprecated a very long time ago.
---
Gemfile | 1 -
README.md | 2 +-
benchmark/yaml.rb | 16 ----------
lib/pathutil/helpers.rb | 38 +++++------------------
spec/tests/lib/pathutil/helpers_spec.rb | 53 ---------------------------------
5 files changed, 8 insertions(+), 102 deletions(-)
delete mode 100644 benchmark/yaml.rb
diff --git a/Gemfile b/Gemfile
index 60ea36c..d9e73ed 100644
--- a/Gemfile
+++ b/Gemfile
@@ -7,7 +7,6 @@ gem "rake", :require => false
gemspec
group :test do
- gem "safe_yaml", :require => false
gem "luna-rspec-formatters", :require => false
gem "simplecov", :require => false
end
diff --git a/README.md b/README.md
index 774f708..933fa93 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ but only if they originate from the given root.
- `>=`, `>` - Check if a file is in but ahead of a path: `Pathutil.new("/tmp/hello") > "/tmp" # => true`
- `in_path?` - Check if a file is within a given path: `Pathutil.new("/tmp/hello").in_path?("/tmp") # => true`
- `<=`, `<` - Check if a file is in but below a path: `Pathutil.new("/tmp") < "/tmp/hello" # => true`
-- `read_yaml` - a wrapper around `Yaml.safe_load` and `SafeYAML` to make reading `YAML` easy.
+- `read_yaml` - a wrapper around `Yaml.safe_load` to make reading `YAML` easy.
- `children` - behaves like Pathname, except it accepts a block to work on the path.
- `safe_copy` - Copy files, disallowing symlinks unless `in_path?`
- `enforce_root` - Force a root if not already in that root.
diff --git a/benchmark/yaml.rb b/benchmark/yaml.rb
deleted file mode 100644
index d6b0812..0000000
--- a/benchmark/yaml.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# Frozen-string-literal: true
-# Copyright: 2015 - 2017 Jordon Bedwell - MIT License
-# Encoding: utf-8
-
-require "bundler/setup"
-require "safe_yaml/load"
-require "benchmark/ips"
-require "pathutil"
-
-data = "hello: world\nworld: hello"
-Benchmark.ips :quiet => true do |x|
- x.json! "benchmark.json"
- x.report("A:SafeYAML.load") { SafeYAML.load(data) }
- x.report("B:Pathutil::Helpers.load_yaml") { Pathutil::Helpers.load_yaml(data) }
- x.compare!
-end
diff --git a/lib/pathutil/helpers.rb b/lib/pathutil/helpers.rb
index e777c0d..8734690 100644
--- a/lib/pathutil/helpers.rb
+++ b/lib/pathutil/helpers.rb
@@ -20,7 +20,7 @@ class Pathutil
end
# --
- # Wraps around YAML and SafeYAML to provide alternatives to Rubies.
+ # Wraps around YAMLto provide alternatives to Rubies.
# @note We default aliases to yes so we can detect if you explicit true.
# @return Hash
# --
@@ -34,20 +34,12 @@ class Pathutil
)
end
- if !YAML.respond_to?(:safe_load)
- setup_safe_yaml whitelist_classes, aliases
- SafeYAML.load(
- data
- )
-
- else
- YAML.safe_load(
- data,
- permitted_classes: whitelist_classes,
- permitted_symbols: whitelist_symbols,
- aliases: aliases
- )
- end
+ YAML.safe_load(
+ data,
+ permitted_classes: whitelist_classes,
+ permitted_symbols: whitelist_symbols,
+ aliases: aliases
+ )
end
# --
@@ -109,21 +101,5 @@ class Pathutil
prefix, ext || ""
]
end
-
- # --
- # Wrap around, cleanup, deprecate and use SafeYAML.
- # rubocop:enable Style/ParallelAssignment
- # --
- private
- def setup_safe_yaml(whitelist_classes, aliases)
- warn "WARN: SafeYAML does not support disabling of aliases." if aliases && aliases != :yes
- warn "WARN: SafeYAML will be removed when Ruby 2.0 goes EOL."
- require "safe_yaml/load"
-
- SafeYAML.restore_defaults!
- whitelist_classes.map(&SafeYAML.method(
- :whitelist_class!
- ))
- end
end
end
diff --git a/spec/tests/lib/pathutil/helpers_spec.rb b/spec/tests/lib/pathutil/helpers_spec.rb
index 0dfbc00..d82f0ac 100644
--- a/spec/tests/lib/pathutil/helpers_spec.rb
+++ b/spec/tests/lib/pathutil/helpers_spec.rb
@@ -35,59 +35,6 @@ describe Pathutil::Helpers do
Psych::DisallowedClass
)
end
-
- #
-
- context "when using SafeYAML" do
- before do
- allow(YAML).to receive(:respond_to?).with(:safe_load).and_return(false)
- expect_any_instance_of(described_class).to receive(:warn).and_return(
- nil
- )
- end
-
- #
-
- context do
- it "should warn it's deprecated" do
- expect(described_class).to receive(:warn).and_return(
- nil
- )
- end
-
- #
-
- after do
- described_class.load_yaml(
- ":hello: :world"
- )
- end
- end
-
- #
-
- context "when trying to disable aliases" do
- it "should warn that you cannot disable them in SafeYAML" do
- expect(described_class).to receive(:warn).exactly(2).times.and_return(
- nil
- )
- end
-
- #
-
- after do
- described_class.load_yaml("hello: world", aliases: true)
- end
- end
-
- #
-
- it "should parse with SafeYAML" do
- expect(described_class.load_yaml(":hello: :world")).to eq({
- ":hello" => ":world"
- })
- end
- end
end
#
--
2.16.4
Patch-Source: https://github.com/envygeeks/pathutil/pull/5
--
From 3451a10c362fc867b20c7e471a551b31c40a0246 Mon Sep 17 00:00:00 2001
From: Tom Dunlap <tom@motevets.com>
Date: Tue, 9 Jun 2020 12:59:32 -0400
Subject: [PATCH] Fix ruby keyword parameter deprecation warnings
In ruby 2.7, using the last argument as keyword parameters became
deprecated in preparation for ruby 3.0. When running the tests, we saw
numerous deprecation warnings. This commit fixes up those deprecation
warnings by explicitly passing the last argument(s) as keyword
argument(s).
See: https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/
Fixes #4
Side note: this commit did not fix the `#binread` method because it was
untested, and when attempting to add tests, we got the following failing
test:
```
1) Pathutil#binread when set to normalize should use encode to convert CRLF to LF
Failure/Error:
File.binread(self, *args, kwd).encode({
:universal_newline => true
})
TypeError:
no implicit conversion of Hash into Integer
# ./lib/pathutil.rb:509:in `binread'
# ./lib/pathutil.rb:509:in `binread'
# ./spec/tests/lib/pathutil_spec.rb:943:in `block (4 levels) in <top (required)>'
```
...which appears to be occuring because of an interface mismatch as
`IO#binread` does not take keyword arguments.
https://ruby-doc.org/core-2.7.1/IO.html#method-c-binread
---
lib/pathutil.rb | 36 ++++++++-----------------
spec/tests/lib/pathutil/helpers_spec.rb | 4 +--
spec/tests/lib/pathutil_spec.rb | 13 +++------
3 files changed, 16 insertions(+), 37 deletions(-)
diff --git a/lib/pathutil.rb b/lib/pathutil.rb
index 1a15873..80913f2 100644
--- a/lib/pathutil.rb
+++ b/lib/pathutil.rb
@@ -456,14 +456,10 @@ def safe_copy(to, root: nil, ignore: [])
to = self.class.new(to)
if directory?
- safe_copy_directory(to, {
- :root => root, :ignore => ignore
- })
+ safe_copy_directory(to, root: root, ignore: ignore)
else
- safe_copy_file(to, {
- :root => root
- })
+ safe_copy_file(to, root: root)
end
end
@@ -494,14 +490,10 @@ def read(*args, **kwd)
kwd[:encoding] ||= encoding
if normalize[:read]
- File.read(self, *args, kwd).encode({
- :universal_newline => true
- })
+ File.read(self, *args, **kwd).encode(universal_newline: true)
else
- File.read(
- self, *args, kwd
- )
+ File.read(self, *args, **kwd)
end
end
@@ -534,13 +526,13 @@ def readlines(*args, **kwd)
kwd[:encoding] ||= encoding
if normalize[:read]
- File.readlines(self, *args, kwd).encode({
+ File.readlines(self, *args, **kwd).encode({
:universal_newline => true
})
else
File.readlines(
- self, *args, kwd
+ self, *args, **kwd
)
end
end
@@ -556,11 +548,11 @@ def write(data, *args, **kwd)
if normalize[:write]
File.write(self, data.encode(
:crlf_newline => true
- ), *args, kwd)
+ ), *args, **kwd)
else
File.write(
- self, data, *args, kwd
+ self, data, *args, **kwd
)
end
end
@@ -670,9 +662,7 @@ def expanded_paths(path)
private
def safe_copy_file(to, root: nil)
raise Errno::EPERM, "#{self} not in #{root}" unless in_path?(root)
- FileUtils.cp(self, to, {
- :preserve => true
- })
+ FileUtils.cp(self, to, preserve: true)
end
# --
@@ -697,15 +687,11 @@ def safe_copy_directory(to, root: nil, ignore: [])
}"
elsif file.file?
- FileUtils.cp(file, to, {
- :preserve => true
- })
+ FileUtils.cp(file, to, preserve: true)
else
path = file.realpath
- path.safe_copy(to.join(file.basename), {
- :root => root, :ignore => ignore
- })
+ path.safe_copy(to.join(file.basename), root: root, ignore: ignore)
end
end
end
diff --git a/spec/tests/lib/pathutil/helpers_spec.rb b/spec/tests/lib/pathutil/helpers_spec.rb
index 4d64d0a..0dfbc00 100644
--- a/spec/tests/lib/pathutil/helpers_spec.rb
+++ b/spec/tests/lib/pathutil/helpers_spec.rb
@@ -76,9 +76,7 @@
#
after do
- described_class.load_yaml("hello: world", {
- :aliases => true
- })
+ described_class.load_yaml("hello: world", aliases: true)
end
end
diff --git a/spec/tests/lib/pathutil_spec.rb b/spec/tests/lib/pathutil_spec.rb
index 784a16b..0ee7a12 100644
--- a/spec/tests/lib/pathutil_spec.rb
+++ b/spec/tests/lib/pathutil_spec.rb
@@ -944,9 +944,7 @@
context "with an encoding argument" do
before do
- file.write("hello", {
- :encoding => "ASCII"
- })
+ file.write("hello", encoding: "ASCII")
end
#
@@ -1050,11 +1048,10 @@
name1.join(name2.basename, name1.basename).touch
name1.join(name1.basename).touch
- name1.safe_copy(name2, {
- :root => tmpdir1, :ignore => [
+ name1.safe_copy(name2, root: tmpdir1, ignore: [
name1.join(name2.basename, name1.basename)
]
- })
+ )
end
#
@@ -1077,9 +1074,7 @@
name1.join(name2.basename, name1.basename).touch
name1.join(name1.basename).touch
- name1.safe_copy(name2, {
- :root => tmpdir1
- })
+ name1.safe_copy(name2, root: tmpdir1)
end
#
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment