summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-12-12 05:07:50 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-12-12 05:07:50 +0000
commit7f9bf068fcff9ca7d6a21711f31c5b8d6022dddf (patch)
tree2bf9d83db081c73e583aeaf9f30140732c43282a /lib
parent53a5b276b8bc6e22a9fecc23dd99259e2d0e7fa4 (diff)
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')
-rw-r--r--lib/rubygems/bundler_version_finder.rb14
-rw-r--r--lib/rubygems/commands/build_command.rb12
-rw-r--r--lib/rubygems/package.rb15
-rw-r--r--lib/rubygems/request.rb1
-rw-r--r--lib/rubygems/specification.rb12
-rw-r--r--lib/rubygems/specification_policy.rb31
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?