Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add 2.5 as minimum required ruby version for gem #70

Merged
merged 1 commit into from
Apr 10, 2021

Conversation

ivoanjo
Copy link
Contributor

@ivoanjo ivoanjo commented Apr 6, 2021

This gem is no longer tested with Rubies older than 2.5, and it's actually broken on at least <= 2.2.

By setting the minimum version in the gemspec, we ensure that older Ruby versions don't try to use an incompatible rexml version.

Outdated original description:

Ruby 2.3 is the oldest Ruby that still passes all tests when running rake test. By setting it in the gemfile gemspec (edit), we ensure that older Ruby versions don't try to use an incompatible rexml version.
(Note: It's probably trivial to support the older Rubies, but I'll leave that for someone who is interested enough in doing the extra work)
I've taken the liberty of also updating the NEWS.md, so that this is ready to release. See #69 for details :)

Copy link
Contributor

@olleolleolle olleolleolle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR makes explicit requirements that were implicit in the code: we need 2.3+.

@olleolleolle
Copy link
Contributor

olleolleolle commented Apr 6, 2021

Now, I am curious about which changes introduced the incompatibility. @ivoanjo Do you have any log output of failed tests, or the like, I can't see them from where I sit. I read the latest 10 changes at the end of the 3.2.5 release, and they seemed not to include "very new things".

Update: d97b318 introduces refinements.

@ivoanjo
Copy link
Contributor Author

ivoanjo commented Apr 6, 2021

The incompatibility with 2.0 is the addition in 9b311e5 (and possibly others) of required named arguments. Doing def foo(arg:) was a 2.1 feature; Ruby 2.0 only allowed def foo(arg: nil).

$ ruby rexml-issue.rb
ruby 2.0.0p648 (2015-12-16 revision 53162) [x86_64-darwin19.6.0]
/Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/rexml-3.2.5/lib/rexml/xpath_parser.rb:12: warning: Refinements are experimental, and the behavior may change in future versions of Ruby!
/Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/rexml-3.2.5/lib/rexml/document.rb:12:in `require_relative': /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/rexml-3.2.5/lib/rexml/parsers/baseparser.rb:515: syntax error, unexpected ',' (SyntaxError)
/Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/rexml-3.2.5/lib/rexml/parsers/baseparser.rb:542: syntax error, unexpected ','
/Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/rexml-3.2.5/lib/rexml/parsers/baseparser.rb:673: syntax error, unexpected keyword_end, expecting end-of-input
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/rexml-3.2.5/lib/rexml/document.rb:12:in `<top (required)>'
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/rexml-3.2.5/lib/rexml.rb:3:in `require_relative'
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/rexml-3.2.5/lib/rexml.rb:3:in `<top (required)>'
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/bundler-1.17.3/lib/bundler/runtime.rb:81:in `require'
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/bundler-1.17.3/lib/bundler/runtime.rb:81:in `block (2 levels) in require'
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/bundler-1.17.3/lib/bundler/runtime.rb:76:in `each'
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/bundler-1.17.3/lib/bundler/runtime.rb:76:in `block in require'
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/bundler-1.17.3/lib/bundler/runtime.rb:65:in `each'
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/bundler-1.17.3/lib/bundler/runtime.rb:65:in `require'
	from /Users/ivo.anjo/.rvm/gems/ruby-2.0.0-p648/gems/bundler-1.17.3/lib/bundler/inline.rb:70:in `gemfile'
	from rexml-issue.rb:5:in `<main>'

@ivoanjo
Copy link
Contributor Author

ivoanjo commented Apr 6, 2021

The incompatibility with 2.2 and 2.1 is using negative? on Floats

ivo.anjo@macieira:~/upstream/rexml$ be rake test
/Users/ivo.anjo/.rvm/rubies/ruby-2.2.10/bin/ruby test/run.rb
Loaded suite test
Started
.............................................................................................................E
=======================================================================================================================================
Error: test_simple(REXMLTests::JaxenTester): NoMethodError: undefined method `negative?' for 1.5:Float
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:425:in `round'
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:249:in `substring'
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:439:in `send'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:430:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:144:in `match'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:81:in `parse'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath.rb:78:in `match'
/Users/ivo.anjo/upstream/rexml/test/test_jaxen.rb:86:in `process_value_of'
/Users/ivo.anjo/upstream/rexml/test/test_jaxen.rb:70:in `block in process_context'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath.rb:68:in `each'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath.rb:68:in `each'
/Users/ivo.anjo/upstream/rexml/test/test_jaxen.rb:69:in `process_context'
/Users/ivo.anjo/upstream/rexml/test/test_jaxen.rb:53:in `block in process_test_case'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath.rb:68:in `each'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath.rb:68:in `each'
/Users/ivo.anjo/upstream/rexml/test/test_jaxen.rb:51:in `process_test_case'
/Users/ivo.anjo/upstream/rexml/test/test_jaxen.rb:33:in `test_simple'
     30:     def _test_numbers ; process_test_case("numbers") ; end
     31:     def test_pi ; process_test_case("pi") ; end
     32:     def test_pi2 ; process_test_case("pi2") ; end
  => 33:     def test_simple ; process_test_case("simple") ; end
     34:     # TODO: namespace node is needed
     35:     def _test_testNamespaces ; process_test_case("testNamespaces") ; end
     36:     # document() function for XSLT isn't supported
=======================================================================================================================================
.......................................................................................................................................
...................................................................................E
=======================================================================================================================================
Error: test_floor_ceiling_round(REXMLTests::FunctionsTester): NoMethodError: undefined method `negative?' for 0.5:Float
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:425:in `round'
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:439:in `send'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:430:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:351:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:604:in `block (2 levels) in evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `each'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `each_with_index'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `block in evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:593:in `collect'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:593:in `evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:449:in `step'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:194:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:144:in `match'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:81:in `parse'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath.rb:78:in `match'
/Users/ivo.anjo/upstream/rexml/test/functions/test_base.rb:175:in `block (2 levels) in test_floor_ceiling_round'
     172:       good.each do |key, value|
     173:         (0..3).each do |i|
     174:           xpath = "//b[number(@id) = #{key}(#{i+0.5})]"
  => 175:           assert_equal(value[i], REXML::XPath.match(doc, xpath))
     176:         end
     177:       end
     178:
/Users/ivo.anjo/upstream/rexml/test/functions/test_base.rb:173:in `each'
/Users/ivo.anjo/upstream/rexml/test/functions/test_base.rb:173:in `block in test_floor_ceiling_round'
/Users/ivo.anjo/upstream/rexml/test/functions/test_base.rb:172:in `each'
/Users/ivo.anjo/upstream/rexml/test/functions/test_base.rb:172:in `test_floor_ceiling_round'
=======================================================================================================================================
.........E
=======================================================================================================================================
Error: test_substring(REXMLTests::FunctionsTester): NoMethodError: undefined method `negative?' for 1.5:Float
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:425:in `round'
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:249:in `substring'
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:439:in `send'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:430:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:350:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:604:in `block (2 levels) in evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `each'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `each_with_index'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `block in evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:593:in `collect'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:593:in `evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:449:in `step'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:194:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:144:in `match'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:81:in `parse'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath.rb:78:in `match'
/Users/ivo.anjo/upstream/rexml/lib/rexml/element.rb:2122:in `to_a'
/Users/ivo.anjo/upstream/rexml/test/functions/test_base.rb:105:in `block in test_substring'
     102:         ['-42', '1 div 0', '12345'],
     103:                           ['-1 div 0', '1 div 0', '']
     104:       ].each { |start, length, expected|
  => 105:         set = doc.elements.to_a("//test[substring(@string, #{start}, #{length}) = '#{expected}']")
     106:         assert_equal 1, set.size, "#{start}, #{length}, '#{expected}'"
     107:       }
     108:     end
/Users/ivo.anjo/upstream/rexml/test/functions/test_base.rb:104:in `each'
/Users/ivo.anjo/upstream/rexml/test/functions/test_base.rb:104:in `test_substring'
=======================================================================================================================================
E
=======================================================================================================================================
Error: test_substring2(REXMLTests::FunctionsTester): NoMethodError: undefined method `negative?' for 2.0:Float
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:425:in `round'
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:249:in `substring'
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:439:in `send'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:430:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:350:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:604:in `block (2 levels) in evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `each'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `each_with_index'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `block in evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:593:in `collect'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:593:in `evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:449:in `step'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:194:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:144:in `match'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:81:in `parse'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath.rb:78:in `match'
/Users/ivo.anjo/upstream/rexml/lib/rexml/element.rb:2122:in `to_a'
/Users/ivo.anjo/upstream/rexml/test/functions/test_base.rb:155:in `test_substring2'
     152:
     153:     def test_substring2
     154:       doc = Document.new('<test string="12345" />')
  => 155:       assert_equal(1,doc.elements.to_a("//test[substring(@string,2)='2345']").size)
     156:     end
     157:
     158:     # Submitted by Kouhei
=======================================================================================================================================
.......................................................................................................................................
......E
=======================================================================================================================================
Error: test_substring(REXMLTests::TestXPathBase): NoMethodError: undefined method `negative?' for 1.5:Float
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:425:in `round'
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:249:in `substring'
/Users/ivo.anjo/upstream/rexml/lib/rexml/functions.rb:439:in `send'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:430:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:350:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:604:in `block (2 levels) in evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `each'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `each_with_index'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:596:in `block in evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:593:in `collect'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:593:in `evaluate_predicate'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:449:in `step'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:194:in `expr'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:144:in `match'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath_parser.rb:81:in `parse'
/Users/ivo.anjo/upstream/rexml/lib/rexml/xpath.rb:78:in `match'
/Users/ivo.anjo/upstream/rexml/lib/rexml/element.rb:2122:in `to_a'
/Users/ivo.anjo/upstream/rexml/test/xpath/test_base.rb:542:in `block in test_substring'
     539:         ['-42', '1 div 0', '12345'],
     540:         ['-1 div 0', '1 div 0', '']
     541:       ].each { |start, length, expected|
  => 542:         set = doc.elements.to_a("//test[substring(@string, #{start}, #{length}) = '#{expected}']")
     543:         assert_equal 1, set.size, "#{start}, #{length}, '#{expected}'"
     544:       }
     545:     end
/Users/ivo.anjo/upstream/rexml/test/xpath/test_base.rb:541:in `each'
/Users/ivo.anjo/upstream/rexml/test/xpath/test_base.rb:541:in `test_substring'
=======================================================================================================================================
...........................................................
Finished in 5.790976 seconds.
---------------------------------------------------------------------------------------------------------------------------------------
541 tests, 1610 assertions, 0 failures, 5 errors, 0 pendings, 0 omissions, 0 notifications
99.0758% passed
---------------------------------------------------------------------------------------------------------------------------------------
93.42 tests/s, 278.02 assertions/s
rake aborted!
Command failed with status (1): [/Users/ivo.anjo/.rvm/rubies/ruby-2.2.10/bi...]
/Users/ivo.anjo/upstream/rexml/Rakefile:9:in `block in <top (required)>'
/Users/ivo.anjo/.rvm/gems/ruby-2.2.10/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/Users/ivo.anjo/.rvm/gems/ruby-2.2.10/bin/ruby_executable_hooks:22:in `eval'
/Users/ivo.anjo/.rvm/gems/ruby-2.2.10/bin/ruby_executable_hooks:22:in `<main>'
Tasks: TOP => test
(See full trace by running task with --trace)

@olleolleolle
Copy link
Contributor

olleolleolle commented Apr 6, 2021

@ivoanjo Thanks for the backtraces! That makes it clear, to me, that a Ruby version specifier is useful.

@olleolleolle olleolleolle requested a review from kou April 6, 2021 15:43
@kou
Copy link
Member

kou commented Apr 7, 2021

We don't want to care about EOL-ed Rubies...: #38

If you want to support EOL-ed Rubies, do it with your own risk.

Could you yank version 3.2.5, so that bundler doesn't try to install it on older rubies?

We don't want to do it for EOL-ed Rubies. 3.2.5 includes a security fix: https://www.ruby-lang.org/en/news/2021/04/05/xml-round-trip-vulnerability-in-rexml-cve-2021-28965/

The announce mentions "3.2.5 or later". If we yank 3.2.5 for EOL-ed Rubies, it confuses users of not EOL-ed Rubies.

REXML in Ruby 2.0 still has the security problem. So we don't recommend using REXML in Ruby 2.0.

@ivoanjo
Copy link
Contributor Author

ivoanjo commented Apr 7, 2021

@kou I understand your point. I guess given the current constraints of not yanking 3.2.5, there's no good option for those older Rubies (< 2.3) -- they'll always get a broken rexml.

But perhaps we could set things up to avoid this issue in the future. Because Ruby 2.5 is EOL as well now, would you consider adding spec.required_ruby_version = '>= 2.6.0' from next release on?

That way hopefully this issue will not happen again once rexml uses Ruby 2.6 features, and so Ruby 2.3 to 2.5 will not run into this issue.

I'm open to updating this PR with that. Would that be an acceptable compromise?

@kou
Copy link
Member

kou commented Apr 8, 2021

We don't want to maintain spec.required_ruby_version for EOL-ed Rubies.
If we drop support for not EOL-ed Rubies, we specify spec.required_ruby_version. (But we will not drop support for not EOL-ed Rubies.)

@ivoanjo
Copy link
Contributor Author

ivoanjo commented Apr 8, 2021

We don't want to maintain spec.required_ruby_version for EOL-ed Rubies.

@kou, that's quite unfortunate, as it complicates a lot the life of people on older Rubies. Would you be open to help maintaining this gem, or even maintaining just that part? I'm definitely up for it, and I believe I could probably convince my employer @DataDog to let me carve out a bit of regular time for this if needed.

I quite understand not supporting older rubies via code, but just not doing something really easy to make them not break I believe is missing an opportunity to help out a user which may be quite new to the ecosystem or that just inherited some legacy application and is trying to upgrade it to be able to move to a newer Ruby version. I'd call that a tiny bit of programmer happiness :)

Furthermore, the latest @jruby release is 9.2.17.0, which still only supports Ruby 2.5.7. Since you mentioned that rexml 3.2.5 is the last version that would support Ruby 2.5, this means that any new version may break JRuby 9.2, and those users have no alternative yet, because that's the latest stable version. And even if JRuby 9.3 comes out really soon, is it that unreasonable to expect that users would have a time window of a few months before JRuby 9.2 becoming unsupported?

I too advocate for using up-to-date Rubies, and supporting the old ones on behalf of my employer is a big resource sink, but our own stats at @DataDog look a lot like those in this Jetbrains study: https://www.jetbrains.com/lp/devecosystem-2020/ruby/ -- quite a lot of people are still on 2.5 and below.

If I cannot convince you to reconsider this stance, I have a final proposal: Would you accept a PR that documents this stance in the README, so that there's a clear note for users that they must not expect a given version of rexml to work with a Ruby version that was considered EOL at the time it was released? That way at least we avoid this issue being opened from time to time (like I did with #69 that ends up being a dupe of #38), and hopefully will free you from being forced to revisit the issue from time to time.

@kou
Copy link
Member

kou commented Apr 9, 2021

OK.
We accept this spec.required_ruby_version change but we don't maintain this. If someone opens a pull request to maintain spec.required_ruby_version, we'll merge it.

Could you remove NEWS.md change from this pull request? We update it when we release a new version.

Could you also open a pull request to mention our stance in README.md?

FYI: Ruby < 3 users can use bundled REXML. They don't need to use REXML gem.

@ivoanjo ivoanjo force-pushed the add-minimum-ruby-version branch from 430b7ef to a6e339d Compare April 9, 2021 14:10
@ivoanjo ivoanjo changed the title Add 2.3 as minimum required ruby version for gem Add ~~2.3~~ 2.6 as minimum required ruby version for gem Apr 9, 2021
@ivoanjo ivoanjo changed the title Add ~~2.3~~ 2.6 as minimum required ruby version for gem Add 2.6 as minimum required ruby version for gem Apr 9, 2021
@ivoanjo ivoanjo force-pushed the add-minimum-ruby-version branch from a6e339d to e3b1096 Compare April 9, 2021 14:12
This gem is no longer tested with Rubies older than 2.5,
and it's actually broken on at least <= 2.2.

By setting the minimum version in the `gemspec`, we ensure that older Ruby
versions don't try to use an incompatible `rexml` version.

Issue ruby#69
@ivoanjo ivoanjo force-pushed the add-minimum-ruby-version branch from a284a7a to 3fb8b41 Compare April 9, 2021 14:25
@ivoanjo ivoanjo changed the title Add 2.6 as minimum required ruby version for gem Add 2.5 as minimum required ruby version for gem Apr 9, 2021
@ivoanjo
Copy link
Contributor Author

ivoanjo commented Apr 9, 2021

Thanks! I was going for minimum 2.6, but I realized that broke CI mainly due to JRuby so I just put 2.5 as the minimum, as that seems reasonable as well.

I'll open up a separate PR to update the README, as discussed.

ivoanjo added a commit to DataDog/rexml that referenced this pull request Apr 9, 2021
@kou kou merged commit 072b02f into ruby:master Apr 10, 2021
@kou
Copy link
Member

kou commented Apr 10, 2021

Thanks.
I've merged.

kou pushed a commit that referenced this pull request Apr 10, 2021
@ivoanjo
Copy link
Contributor Author

ivoanjo commented Apr 11, 2021

Thanks for the help :)

@ivoanjo ivoanjo deleted the add-minimum-ruby-version branch April 11, 2021 11:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants