summaryrefslogtreecommitdiff
path: root/dev-ruby/pathutil/files/pathutil-0.16.2-ruby31.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-ruby/pathutil/files/pathutil-0.16.2-ruby31.patch')
-rw-r--r--dev-ruby/pathutil/files/pathutil-0.16.2-ruby31.patch247
1 files changed, 247 insertions, 0 deletions
diff --git a/dev-ruby/pathutil/files/pathutil-0.16.2-ruby31.patch b/dev-ruby/pathutil/files/pathutil-0.16.2-ruby31.patch
new file mode 100644
index 000000000000..0bfc4c5919b5
--- /dev/null
+++ b/dev-ruby/pathutil/files/pathutil-0.16.2-ruby31.patch
@@ -0,0 +1,247 @@
+https://github.com/envygeeks/pathutil/pull/7
+
+From c0ecc9a516ed43facfb3a80735034c892d517d1a 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)>'
+
+From 868efe4022f944cef81b05ae01e00fab2d51ee5c 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.
+--- 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
+--- 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.
+--- 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
+--- 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,
+- whitelist_classes,
+- whitelist_symbols,
+- 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
+--- a/spec/tests/lib/pathutil/helpers_spec.rb
++++ b/spec/tests/lib/pathutil/helpers_spec.rb
+@@ -26,113 +26,10 @@ describe Pathutil::Helpers do
+ "hello" => "world"
+ })
+ end
++ end
+
+ #
+
+- context "when safe" do
+- it "should reject any special classes", :disable => :oldest_ruby do
+- expect { described_class.load_yaml(":hello: :world") }.to raise_error(
+- 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
+-
+- #
+-
+- context "when whitelisting classes" do
+- it "should allow that class to be loaded" do
+- expect(described_class.load_yaml(":hello: :world", :whitelist_classes => [Symbol])).to eq({
+- :hello => :world
+- })
+- end
+- end
+-
+- #
+-
+- context "when diallowing aliases" do
+- it "should throw the parse" do
+- yaml = "version: &version 1\nother_version: *version"
+- expect { described_class.load_yaml(yaml, :aliases => false) }.to raise_error(
+- Psych::BadAlias
+- )
+- end
+- end
+-
+- #
+-
+- context do
+- it "should allow aliases by default" do
+- expect(described_class.load_yaml("version: &version 1\nother_version: *version")).to eq({
+- "version" => 1, "other_version" => 1
+- })
+- end
+- end
+-
+- #
+-
+- context do
+- it "should parse YAML" do
+- expect(described_class.load_yaml("hello: world\nworld: hello")).to eq({
+- "hello" => "world",
+- "world" => "hello"
+- })
+- end
+- end
+- end
+-
+ #
+
+ describe ".make_tmpname" do