diff options
author | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-12-12 05:07:50 +0000 |
---|---|---|
committer | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-12-12 05:07:50 +0000 |
commit | 7f9bf068fcff9ca7d6a21711f31c5b8d6022dddf (patch) | |
tree | 2bf9d83db081c73e583aeaf9f30140732c43282a /lib/rubygems | |
parent | 53a5b276b8bc6e22a9fecc23dd99259e2d0e7fa4 (diff) | |
download | ruby-7f9bf068fcff9ca7d6a21711f31c5b8d6022dddf.tar.gz |
Merge rubygems@21f12a8 from upstream.
* [BudlerVersionFinder] set .filter! and .compatible? to match only on major versions https://github.com/rubygems/rubygems/pull/2515
* Fix broken symlink that points to ../* https://github.com/rubygems/rubygems/pull/2516
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66347 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems')
-rw-r--r-- | lib/rubygems/bundler_version_finder.rb | 14 | ||||
-rw-r--r-- | lib/rubygems/commands/build_command.rb | 12 | ||||
-rw-r--r-- | lib/rubygems/package.rb | 15 | ||||
-rw-r--r-- | lib/rubygems/request.rb | 1 | ||||
-rw-r--r-- | lib/rubygems/specification.rb | 12 | ||||
-rw-r--r-- | lib/rubygems/specification_policy.rb | 31 |
6 files changed, 48 insertions, 37 deletions
diff --git a/lib/rubygems/bundler_version_finder.rb b/lib/rubygems/bundler_version_finder.rb index 11fb81450a..e74baca1ee 100644 --- a/lib/rubygems/bundler_version_finder.rb +++ b/lib/rubygems/bundler_version_finder.rb @@ -37,20 +37,14 @@ To install the missing version, run `gem install bundler:#{vr.first}` def self.compatible?(spec) return true unless spec.name == "bundler".freeze return true unless bundler_version = self.bundler_version - if bundler_version.segments.first >= 2 - spec.version == bundler_version - else # 1.x - spec.version.segments.first < 2 - end + + spec.version.segments.first == bundler_version.segments.first end def self.filter!(specs) return unless bundler_version = self.bundler_version - if bundler_version.segments.first >= 2 - specs.reject! { |spec| spec.version != bundler_version } - else # 1.x - specs.reject! { |spec| spec.version.segments.first >= 2} - end + + specs.reject! { |spec| spec.version.segments.first != bundler_version.segments.first } end def self.bundle_update_bundler_version diff --git a/lib/rubygems/commands/build_command.rb b/lib/rubygems/commands/build_command.rb index 78737154b6..e59471e976 100644 --- a/lib/rubygems/commands/build_command.rb +++ b/lib/rubygems/commands/build_command.rb @@ -14,6 +14,10 @@ class Gem::Commands::BuildCommand < Gem::Command add_option '--strict', 'consider warnings as errors when validating the spec' do |value, options| options[:strict] = true end + + add_option '-o', '--output FILE', 'output gem with the given filename' do |value, options| + options[:output] = value + end end def arguments # :nodoc: @@ -36,6 +40,11 @@ with gem spec: $ cd my_gem-1.0 [edit gem contents] $ gem build my_gem-1.0.gemspec + +Gems can be saved to a specified filename with the output option: + + $ gem build my_gem-1.0.gemspec --output=release.gem + EOF end @@ -58,7 +67,8 @@ with gem spec: Gem::Package.build( spec, options[:force], - options[:strict] + options[:strict], + options[:output] ) else alert_error "Error loading gemspec. Aborting." diff --git a/lib/rubygems/package.rb b/lib/rubygems/package.rb index 9af84981a4..3d81b8b7ac 100644 --- a/lib/rubygems/package.rb +++ b/lib/rubygems/package.rb @@ -119,8 +119,8 @@ class Gem::Package # Permission for other files attr_accessor :data_mode - def self.build(spec, skip_validation = false, strict_validation = false) - gem_file = spec.file_name + def self.build(spec, skip_validation = false, strict_validation = false, file_name = nil) + gem_file = file_name || spec.file_name package = new gem_file package.spec = spec @@ -223,8 +223,13 @@ class Gem::Package stat = File.lstat file if stat.symlink? - relative_dir = File.dirname(file).sub("#{Dir.pwd}/", '') - target_path = File.join(relative_dir, File.readlink(file)) + target_path = File.readlink(file) + + unless target_path.start_with? '.' + relative_dir = File.dirname(file).sub("#{Dir.pwd}/", '') + target_path = File.join(relative_dir, target_path) + end + tar.add_symlink file, target_path, stat.mode end @@ -281,7 +286,7 @@ class Gem::Package Successfully built RubyGem Name: #{@spec.name} Version: #{@spec.version} - File: #{File.basename @spec.cache_file} + File: #{File.basename @gem.path} EOM ensure @signer = nil diff --git a/lib/rubygems/request.rb b/lib/rubygems/request.rb index fb164d79cf..9aadc38cb3 100644 --- a/lib/rubygems/request.rb +++ b/lib/rubygems/request.rb @@ -45,7 +45,6 @@ class Gem::Request end def self.configure_connection_for_https(connection, cert_files) - require 'net/https' connection.use_ssl = true connection.verify_mode = Gem.configuration.ssl_verify_mode || OpenSSL::SSL::VERIFY_PEER diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index b620021c5c..bba3ffeab5 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -156,7 +156,6 @@ class Gem::Specification < Gem::BasicSpecification :required_ruby_version => Gem::Requirement.default, :required_rubygems_version => Gem::Requirement.default, :requirements => [], - :rubyforge_project => nil, :rubygems_version => Gem::VERSION, :signing_key => nil, :specification_version => CURRENT_SPECIFICATION_VERSION, @@ -730,12 +729,11 @@ class Gem::Specification < Gem::BasicSpecification attr_writer :original_platform # :nodoc: ## - # The rubyforge project this gem lives under. i.e. RubyGems' - # rubyforge_project is "rubygems". + # Deprecated and ignored. # - # This option is deprecated. + # Formerly used to set rubyforge project. - attr_accessor :rubyforge_project + attr_writer :rubyforge_project ## # The Gem::Specification version of this gemspec. @@ -1347,7 +1345,7 @@ class Gem::Specification < Gem::BasicSpecification spec.instance_variable_set :@required_rubygems_version, array[7] spec.instance_variable_set :@original_platform, array[8] spec.instance_variable_set :@dependencies, array[9] - spec.instance_variable_set :@rubyforge_project, array[10] + # offset due to rubyforge_project removal spec.instance_variable_set :@email, array[11] spec.instance_variable_set :@authors, array[12] spec.instance_variable_set :@description, array[13] @@ -1392,7 +1390,7 @@ class Gem::Specification < Gem::BasicSpecification @required_rubygems_version, @original_platform, @dependencies, - @rubyforge_project, + '', # rubyforge_project @email, @authors, @description, diff --git a/lib/rubygems/specification_policy.rb b/lib/rubygems/specification_policy.rb index bc552f8287..4b79c1ac61 100644 --- a/lib/rubygems/specification_policy.rb +++ b/lib/rubygems/specification_policy.rb @@ -150,19 +150,24 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use: if open_ended op, dep_version = dep.requirement.requirements.first - base = dep_version.segments.first 2 - - bugfix = if op == '>' - ", '> #{dep_version}'" - elsif op == '>=' and base != dep_version.segments - ", '>= #{dep_version}'" - end - - warning_messages << <<-WARNING -open-ended dependency on #{dep} is not recommended - if #{dep.name} is semantically versioned, use: - add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}'#{bugfix} - WARNING + segments = dep_version.segments + + base = segments.first 2 + + recommendation = if (op == '>' || op == '>=') && segments == [0] + " use a bounded requirement, such as '~> x.y'" + else + bugfix = if op == '>' + ", '> #{dep_version}'" + elsif op == '>=' and base != segments + ", '>= #{dep_version}'" + end + + " if #{dep.name} is semantically versioned, use:\n" \ + " add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}'#{bugfix}" + end + + warning_messages << ["open-ended dependency on #{dep} is not recommended", recommendation].join("\n") + "\n" end end if error_messages.any? |