Skip to content

Commit d7e82fe

Browse files
committed
Switch back to patching Gem::Version
Gem::Dependency uses Gem::Version internally, so we need to patch it.
1 parent ab3f48f commit d7e82fe

File tree

6 files changed

+40
-77
lines changed

6 files changed

+40
-77
lines changed

lib/puppet_library/forge/search_result.rb

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1717

1818
require 'puppet_library/util/patches'
19-
require 'puppet_library/util/version'
2019

2120
module PuppetLibrary::Forge
2221
module SearchResult
@@ -47,7 +46,7 @@ def self.combine_search_results(search_results)
4746
end
4847

4948
def self.max_version(left, right)
50-
[PuppetLibrary::Util::Version.new(left), PuppetLibrary::Util::Version.new(right)].max.version
49+
[Gem::Version.new(left), Gem::Version.new(right)].max.version
5150
end
5251
end
5352
end

lib/puppet_library/util.rb

-1
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,3 @@ module PuppetLibrary::Util
2323
require 'puppet_library/util/logging'
2424
require 'puppet_library/util/patches'
2525
require 'puppet_library/util/temp_dir'
26-
require 'puppet_library/util/version'

lib/puppet_library/util/patches.rb

+20-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,25 @@
1616
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1717

1818
require 'rubygems/package'
19-
require 'puppet_library/util/version'
19+
20+
# Early versions of Rubygems have problems with version numbers with dashes
21+
# (e.g. "1.0.0-rc1"). This adds the behaviour or new RG versions to all
22+
# versions, hopefully without breaking newer versions. In most cases we want to
23+
# fail silently with bad version numbers so that we don't crash the server
24+
# because of weird stuff from a remote forge or elsewhere.
25+
module Gem
26+
def Version.new(version)
27+
super(version.to_s.gsub("-",".pre."))
28+
rescue ArgumentError
29+
# If it starts with numbers, use those
30+
if version =~ /^\d+(\.\d+)*/
31+
super(version[/^\d+(\.\d+)*/])
32+
# Somebody's really made a mess of this version number
33+
else
34+
super("0")
35+
end
36+
end
37+
end
2038

2139
class Array
2240
# Like 'uniq' with a block, but also works on Ruby < 1.9
@@ -39,7 +57,7 @@ def version_sort
3957
def version_sort_by
4058
sort_by do |element|
4159
version = yield(element)
42-
PuppetLibrary::Util::Version.new(version)
60+
Gem::Version.new(version)
4361
end
4462
end
4563

lib/puppet_library/util/version.rb

-32
This file was deleted.

spec/util/patches_spec.rb

+19
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,25 @@
1818
require 'spec_helper'
1919

2020
describe 'patches' do
21+
describe Gem::Version do
22+
describe "#new" do
23+
context "when the version number contains a dash" do
24+
it "replaces the dash with '.pre.'" do
25+
expect(Gem::Version.new("1.0.0-rc1")).to eq Gem::Version.new("1.0.0.pre.rc1")
26+
end
27+
end
28+
context "when the version number has trailing garbage" do
29+
it "uses the numbers at the beginning" do
30+
expect(Gem::Version.new("123 xyz")).to eq Gem::Version.new("123")
31+
end
32+
end
33+
context "when the version is completely garbage" do
34+
it "pretends the version number is zero" do
35+
expect(Gem::Version.new("xyz")).to eq Gem::Version.new("0")
36+
end
37+
end
38+
end
39+
end
2140

2241
describe Array do
2342
describe "#unique_by" do

spec/util/version_spec.rb

-40
This file was deleted.

0 commit comments

Comments
 (0)