From d805cc76aa69c59dcc32358bb405a27c24e776d8 Mon Sep 17 00:00:00 2001 From: Colin Surprenant Date: Tue, 24 Feb 2015 18:45:21 -0500 Subject: [PATCH] verify Rubygems versions before monkeypatching Fixes #2684 --- lib/logstash/environment.rb | 40 ++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/lib/logstash/environment.rb b/lib/logstash/environment.rb index fb35d0403..a7de1ff06 100644 --- a/lib/logstash/environment.rb +++ b/lib/logstash/environment.rb @@ -11,27 +11,31 @@ require 'logstash/version' # see https://github.com/elasticsearch/logstash/issues/2556 and https://github.com/rubygems/rubygems/issues/1070 # # this code is from Rubygems v2.1.9 in JRuby 1.7.17. Per tickets this issue should be solved at JRuby >= 1.7.20. -class Gem::Specification - def self.reset - @@dirs = nil - Gem.pre_reset_hooks.each { |hook| hook.call } - @@all = nil - @@stubs = nil - _clear_load_cache - unresolved = unresolved_deps - unless unresolved.empty? - unless (unresolved.size == 1 && unresolved["ffi"]) - w = "W" + "ARN" - warn "#{w}: Unresolved specs during Gem::Specification.reset:" - unresolved.values.each do |dep| - warn " #{dep}" + +# this method implementation works for Rubygems version 2.1.0 and up, verified up to 2.4.6 +if Gem::Version.new(Gem::VERSION) >= Gem::Version.new("2.1.0") && Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.5.0") + class Gem::Specification + def self.reset + @@dirs = nil + Gem.pre_reset_hooks.each { |hook| hook.call } + @@all = nil + @@stubs = nil + _clear_load_cache + unresolved = unresolved_deps + unless unresolved.empty? + unless (unresolved.size == 1 && unresolved["ffi"]) + w = "W" + "ARN" + warn "#{w}: Unresolved specs during Gem::Specification.reset:" + unresolved.values.each do |dep| + warn " #{dep}" + end + warn "#{w}: Clearing out unresolved specs." + warn "Please report a bug if this causes problems." end - warn "#{w}: Clearing out unresolved specs." - warn "Please report a bug if this causes problems." + unresolved.clear end - unresolved.clear + Gem.post_reset_hooks.each { |hook| hook.call } end - Gem.post_reset_hooks.each { |hook| hook.call } end end