summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Rodríguez <deivid.rodriguez@riseup.net>2020-05-27 18:30:46 +0200
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2020-06-05 07:32:42 +0900
commit09602f4301ccf64d1b27e62d71f00569d1d78a72 (patch)
tree5f06c9581880b35c3178d7b620d211ad2aa46d38 /lib
parent592762069d025148463266187d6519c4799353dc (diff)
[rubygems/rubygems] Revert multi ruby{,gems} version requirement fix
This reverts commit 20f06d9e178211a3016133852b72d21ac7bb93ad, reversing changes made to f2b30cb70df8a518bef0e8a64bbceb86234d922d. https://github.com/rubygems/rubygems/commit/40802bdb18
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3184
Diffstat (limited to 'lib')
-rw-r--r--lib/bundler/compact_index_client/cache.rb18
-rw-r--r--lib/bundler/compact_index_client/gem_parser.rb66
2 files changed, 13 insertions, 71 deletions
diff --git a/lib/bundler/compact_index_client/cache.rb b/lib/bundler/compact_index_client/cache.rb
index ef8517e8f6..f6105d3bb3 100644
--- a/lib/bundler/compact_index_client/cache.rb
+++ b/lib/bundler/compact_index_client/cache.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require_relative "gem_parser"
-
module Bundler
class CompactIndexClient
class Cache
@@ -94,9 +92,19 @@ module Bundler
header ? lines[header + 1..-1] : lines
end
- def parse_gem(line)
- @gem_parser ||= GemParser.new
- @gem_parser.parse(line)
+ def parse_gem(string)
+ version_and_platform, rest = string.split(" ", 2)
+ version, platform = version_and_platform.split("-", 2)
+ dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
+ dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
+ requirements = requirements ? requirements.map {|r| parse_dependency(r) } : []
+ [version, platform, dependencies, requirements]
+ end
+
+ def parse_dependency(string)
+ dependency = string.split(":")
+ dependency[-1] = dependency[-1].split("&") if dependency.size > 1
+ dependency
end
def info_roots
diff --git a/lib/bundler/compact_index_client/gem_parser.rb b/lib/bundler/compact_index_client/gem_parser.rb
deleted file mode 100644
index 117da64ce6..0000000000
--- a/lib/bundler/compact_index_client/gem_parser.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# frozen_string_literal: true
-
-module Bundler
- class CompactIndexClient
- class GemParser
- def parse(line)
- version_and_platform, rest = line.split(" ", 2)
- version, platform = version_and_platform.split("-", 2)
- dependencies, requirements = rest.split("|", 2) if rest
- dependencies = dependencies ? parse_dependencies(dependencies) : []
- requirements = requirements ? parse_requirements(requirements) : []
- [version, platform, dependencies, requirements]
- end
-
- private
-
- def parse_dependencies(raw_dependencies)
- raw_dependencies.split(",").map {|d| parse_dependency(d) }
- end
-
- def parse_dependency(raw_dependency)
- dependency = raw_dependency.split(":")
- dependency[-1] = dependency[-1].split("&") if dependency.size > 1
- dependency
- end
-
- # Parse the following format:
- #
- # line = "checksum:#{checksum}"
- # line << ",ruby:#{ruby_version}" if ruby_version && ruby_version != ">= 0"
- # line << ",rubygems:#{rubygems_version}" if rubygems_version && rubygems_version != ">= 0"
- #
- # See compact_index/gem_version.rb for details.
- #
- # We can't use parse_dependencies for requirements because "," in
- # ruby_version and rubygems_version isn't escaped as "&". For example,
- # "checksum:XXX,ruby:>=2.2, < 2.7.dev" can't be parsed as expected.
- def parse_requirements(raw_requirements)
- requirements = []
- checksum = raw_requirements.match(/\A(checksum):([^,]+)/)
- if checksum
- requirements << [checksum[1], [checksum[2]]]
- raw_requirements = checksum.post_match
- if raw_requirements.start_with?(",")
- raw_requirements = raw_requirements[1..-1]
- end
- end
- rubygems = raw_requirements.match(/(rubygems):(.+)\z/)
- if rubygems
- raw_requirements = rubygems.pre_match
- if raw_requirements.start_with?(",")
- raw_requirements = raw_requirements[1..-1]
- end
- end
- ruby = raw_requirements.match(/\A(ruby):(.+)\z/)
- if ruby
- requirements << [ruby[1], ruby[2].split(/\s*,\s*/)]
- end
- if rubygems
- requirements << [rubygems[1], rubygems[2].split(/\s*,\s*/)]
- end
- requirements
- end
- end
- end
-end