зеркало из https://github.com/github/ruby.git
Merge rubygems-2.7.3.
http://blog.rubygems.org/2017/11/28/2.7.3-released.html git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
89bfee6fd4
Коммит
e82802070a
|
@ -10,7 +10,7 @@ require 'rbconfig'
|
|||
require 'thread'
|
||||
|
||||
module Gem
|
||||
VERSION = "2.7.2"
|
||||
VERSION = "2.7.3"
|
||||
end
|
||||
|
||||
# Must be first since it unloads the prelude from 1.9.2
|
||||
|
@ -47,9 +47,7 @@ require 'rubygems/errors'
|
|||
# As of RubyGems 1.3.2, RubyGems will load plugins installed in gems or
|
||||
# $LOAD_PATH. Plugins must be named 'rubygems_plugin' (.rb, .so, etc) and
|
||||
# placed at the root of your gem's #require_path. Plugins are discovered via
|
||||
# Gem::find_files and then loaded. Take care when implementing a plugin as your
|
||||
# plugin file may be loaded multiple times if multiple versions of your gem
|
||||
# are installed.
|
||||
# Gem::find_files and then loaded.
|
||||
#
|
||||
# For an example plugin, see the {Graph gem}[https://github.com/seattlerb/graph]
|
||||
# which adds a `gem graph` command.
|
||||
|
|
|
@ -8,13 +8,20 @@ class Gem::Commands::CleanupCommand < Gem::Command
|
|||
def initialize
|
||||
super 'cleanup',
|
||||
'Clean up old versions of installed gems',
|
||||
:force => false, :install_dir => Gem.dir
|
||||
:force => false, :install_dir => Gem.dir,
|
||||
:check_dev => true
|
||||
|
||||
add_option('-n', '-d', '--dryrun',
|
||||
'Do not uninstall gems') do |value, options|
|
||||
options[:dryrun] = true
|
||||
end
|
||||
|
||||
add_option('-D', '--[no-]check-development',
|
||||
'Check development dependencies while uninstalling',
|
||||
'(default: true)') do |value, options|
|
||||
options[:check_dev] = value
|
||||
end
|
||||
|
||||
@candidate_gems = nil
|
||||
@default_gems = []
|
||||
@full = nil
|
||||
|
@ -138,7 +145,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|||
end
|
||||
|
||||
def uninstall_dep spec
|
||||
return unless @full.ok_to_remove?(spec.full_name)
|
||||
return unless @full.ok_to_remove?(spec.full_name, options[:check_dev])
|
||||
|
||||
if options[:dryrun] then
|
||||
say "Dry Run Mode: Would uninstall #{spec.full_name}"
|
||||
|
|
|
@ -82,11 +82,7 @@ class Gem::Commands::SetupCommand < Gem::Command
|
|||
|
||||
add_option '--[no-]regenerate-binstubs',
|
||||
'Regenerate gem binstubs' do |value, options|
|
||||
if value then
|
||||
options[:regenerate_binstubs] = true
|
||||
else
|
||||
options.delete(:regenerate_binstubs)
|
||||
end
|
||||
options[:regenerate_binstubs] = value
|
||||
end
|
||||
|
||||
@verbose = nil
|
||||
|
@ -156,7 +152,7 @@ By default, this RubyGems will install gem as:
|
|||
|
||||
say "RubyGems #{Gem::VERSION} installed"
|
||||
|
||||
regenerate_binstubs
|
||||
regenerate_binstubs if options[:regenerate_binstubs]
|
||||
|
||||
uninstall_old_gemcutter
|
||||
|
||||
|
@ -357,7 +353,7 @@ By default, this RubyGems will install gem as:
|
|||
mkdir_p Gem::Specification.default_specifications_dir
|
||||
|
||||
# Workaround for non-git environment.
|
||||
gemspec = File.read('bundler/bundler.gemspec').gsub(/`git ls-files -z`/, "''")
|
||||
gemspec = File.open('bundler/bundler.gemspec', 'rb'){|f| f.read.gsub(/`git ls-files -z`/, "''") }
|
||||
File.open('bundler/bundler.gemspec', 'w'){|f| f.write gemspec }
|
||||
|
||||
bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
|
||||
|
@ -372,13 +368,24 @@ By default, this RubyGems will install gem as:
|
|||
|
||||
bundler_spec = Gem::Specification.load(default_spec_path)
|
||||
|
||||
if File.directory? bundler_spec.gems_dir
|
||||
Dir.entries(bundler_spec.gems_dir).
|
||||
select {|default_gem| default_gem.start_with?("bundler-") }.
|
||||
select {|default_gem| File.basename(default_gem).match(/^bundler-#{Gem::Version::VERSION_PATTERN}$/) }.
|
||||
each {|default_gem| rm_r File.join(bundler_spec.gems_dir, default_gem) }
|
||||
end
|
||||
|
||||
mkdir_p bundler_spec.bin_dir
|
||||
bundler_spec.executables.each {|e| cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_spec.bin_dir, e) }
|
||||
|
||||
if Gem.win_platform?
|
||||
require 'rubygems/installer'
|
||||
|
||||
installer = Gem::Installer.for_spec bundler_spec
|
||||
bundler_spec.executables.each do |e|
|
||||
installer.generate_windows_script e, bundler_spec.bin_dir
|
||||
end
|
||||
end
|
||||
|
||||
say "Bundler #{bundler_spec.version} installed"
|
||||
end
|
||||
|
||||
|
@ -442,7 +449,7 @@ By default, this RubyGems will install gem as:
|
|||
# for installation of bundler as default gems
|
||||
def template_files
|
||||
Dir.chdir "bundler/lib" do
|
||||
(Dir[File.join('bundler', 'templates', '**', '*')] + Dir[File.join('bundler', 'templates', '**', '.*')]).
|
||||
(Dir[File.join('bundler', 'templates', '**', '{*,.*}')]).
|
||||
select{|f| !File.directory?(f)}
|
||||
end
|
||||
end
|
||||
|
@ -450,7 +457,7 @@ By default, this RubyGems will install gem as:
|
|||
# for cleanup old bundler files
|
||||
def template_files_in dir
|
||||
Dir.chdir dir do
|
||||
(Dir[File.join('templates', '**', '*')] + Dir[File.join('templates', '**', '.*')]).
|
||||
(Dir[File.join('templates', '**', '{*,.*}')]).
|
||||
select{|f| !File.directory?(f)}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -48,9 +48,13 @@ class Gem::Licenses
|
|||
BSD-3-Clause-Attribution
|
||||
BSD-3-Clause-Clear
|
||||
BSD-3-Clause-LBNL
|
||||
BSD-3-Clause-No-Nuclear-License
|
||||
BSD-3-Clause-No-Nuclear-License-2014
|
||||
BSD-3-Clause-No-Nuclear-Warranty
|
||||
BSD-4-Clause
|
||||
BSD-4-Clause-UC
|
||||
BSD-Protection
|
||||
BSD-Source-Code
|
||||
BSL-1.0
|
||||
Bahyph
|
||||
Barr
|
||||
|
@ -126,6 +130,7 @@ class Gem::Licenses
|
|||
Entessa
|
||||
ErlPL-1.1
|
||||
Eurosym
|
||||
FSFAP
|
||||
FSFUL
|
||||
FSFULLR
|
||||
FTL
|
||||
|
@ -137,8 +142,18 @@ class Gem::Licenses
|
|||
GFDL-1.3
|
||||
GL2PS
|
||||
GPL-1.0
|
||||
GPL-1.0+
|
||||
GPL-2.0
|
||||
GPL-2.0+
|
||||
GPL-2.0-with-GCC-exception
|
||||
GPL-2.0-with-autoconf-exception
|
||||
GPL-2.0-with-bison-exception
|
||||
GPL-2.0-with-classpath-exception
|
||||
GPL-2.0-with-font-exception
|
||||
GPL-3.0
|
||||
GPL-3.0+
|
||||
GPL-3.0-with-GCC-exception
|
||||
GPL-3.0-with-autoconf-exception
|
||||
Giftware
|
||||
Glide
|
||||
Glulxe
|
||||
|
@ -152,14 +167,20 @@ class Gem::Licenses
|
|||
ISC
|
||||
ImageMagick
|
||||
Imlib2
|
||||
Info-ZIP
|
||||
Intel
|
||||
Intel-ACPI
|
||||
Interbase-1.0
|
||||
JSON
|
||||
JasPer-2.0
|
||||
LAL-1.2
|
||||
LAL-1.3
|
||||
LGPL-2.0
|
||||
LGPL-2.0+
|
||||
LGPL-2.1
|
||||
LGPL-2.1+
|
||||
LGPL-3.0
|
||||
LGPL-3.0+
|
||||
LGPLLR
|
||||
LPL-1.0
|
||||
LPL-1.02
|
||||
|
@ -170,6 +191,9 @@ class Gem::Licenses
|
|||
LPPL-1.3c
|
||||
Latex2e
|
||||
Leptonica
|
||||
LiLiQ-P-1.1
|
||||
LiLiQ-R-1.1
|
||||
LiLiQ-Rplus-1.1
|
||||
Libpng
|
||||
MIT
|
||||
MIT-CMU
|
||||
|
@ -193,6 +217,7 @@ class Gem::Licenses
|
|||
NBPL-1.0
|
||||
NCSA
|
||||
NGPL
|
||||
NLOD-1.0
|
||||
NLPL
|
||||
NOSL
|
||||
NPL-1.0
|
||||
|
@ -201,11 +226,13 @@ class Gem::Licenses
|
|||
NRL
|
||||
NTP
|
||||
Naumen
|
||||
Net-SNMP
|
||||
NetCDF
|
||||
Newsletr
|
||||
Nokia
|
||||
Noweb
|
||||
Nunit
|
||||
OCCT-PL
|
||||
OCLC-2.0
|
||||
ODbL-1.0
|
||||
OFL-1.0
|
||||
|
@ -229,6 +256,7 @@ class Gem::Licenses
|
|||
OLDAP-2.8
|
||||
OML
|
||||
OPL-1.0
|
||||
OSET-PL-2.1
|
||||
OSL-1.0
|
||||
OSL-1.1
|
||||
OSL-2.0
|
||||
|
@ -259,6 +287,7 @@ class Gem::Licenses
|
|||
SISSL
|
||||
SISSL-1.2
|
||||
SMLNJ
|
||||
SMPPL
|
||||
SNIA
|
||||
SPL-1.0
|
||||
SWL
|
||||
|
@ -269,12 +298,16 @@ class Gem::Licenses
|
|||
Spencer-86
|
||||
Spencer-94
|
||||
Spencer-99
|
||||
StandardML-NJ
|
||||
SugarCRM-1.1.3
|
||||
TCL
|
||||
TCP-wrappers
|
||||
TMate
|
||||
TORQUE-1.1
|
||||
TOSL
|
||||
UPL-1.0
|
||||
Unicode-DFS-2015
|
||||
Unicode-DFS-2016
|
||||
Unicode-TOU
|
||||
Unlicense
|
||||
VOSTROM
|
||||
|
@ -282,7 +315,9 @@ class Gem::Licenses
|
|||
Vim
|
||||
W3C
|
||||
W3C-19980720
|
||||
W3C-20150513
|
||||
WTFPL
|
||||
WXwindows
|
||||
Watcom-1.0
|
||||
Wsuipa
|
||||
X11
|
||||
|
@ -302,8 +337,10 @@ class Gem::Licenses
|
|||
Zlib
|
||||
bzip2-1.0.5
|
||||
bzip2-1.0.6
|
||||
curl
|
||||
diffmark
|
||||
dvipdfm
|
||||
eCos-2.0
|
||||
eGenix
|
||||
gSOAP-1.3b
|
||||
gnuplot
|
||||
|
|
|
@ -13,6 +13,7 @@ class TestGemCommand < Gem::TestCase
|
|||
|
||||
@xopt = nil
|
||||
|
||||
@common_options = Gem::Command.common_options.dup
|
||||
Gem::Command.common_options.clear
|
||||
Gem::Command.common_options << [
|
||||
['-x', '--exe', 'Execute'], lambda do |*a|
|
||||
|
@ -24,6 +25,11 @@ class TestGemCommand < Gem::TestCase
|
|||
@cmd = Gem::Command.new @cmd_name, 'summary'
|
||||
end
|
||||
|
||||
def teardown
|
||||
super
|
||||
Gem::Command.common_options.replace @common_options
|
||||
end
|
||||
|
||||
def test_self_add_specific_extra_args
|
||||
added_args = %w[--all]
|
||||
@cmd.add_option '--all' do |v,o| end
|
||||
|
|
|
@ -32,6 +32,21 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
|
|||
assert @cmd.options[:dryrun]
|
||||
end
|
||||
|
||||
def test_handle_options_check_development
|
||||
@cmd.handle_options []
|
||||
assert @cmd.options[:check_dev]
|
||||
|
||||
%w[-D --check-development].each do |options|
|
||||
@cmd.handle_options [options]
|
||||
assert @cmd.options[:check_dev]
|
||||
end
|
||||
|
||||
%w[--no-check-development].each do |options|
|
||||
@cmd.handle_options [options]
|
||||
refute @cmd.options[:check_dev]
|
||||
end
|
||||
end
|
||||
|
||||
def test_execute
|
||||
@cmd.options[:args] = %w[a]
|
||||
|
||||
|
@ -55,6 +70,34 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
|
|||
refute_path_exists @b_1.gem_dir
|
||||
end
|
||||
|
||||
def test_execute_dev_dependencies
|
||||
@b_1 = util_spec 'b', 1 do |s| s.add_development_dependency 'a', '1' end
|
||||
@c_1 = util_spec 'c', 1 do |s| s.add_development_dependency 'a', '2' end
|
||||
|
||||
install_gem @b_1
|
||||
install_gem @c_1
|
||||
|
||||
@cmd.handle_options %w[--check-development]
|
||||
|
||||
@cmd.execute
|
||||
|
||||
assert_path_exists @a_1.gem_dir
|
||||
end
|
||||
|
||||
def test_execute_without_dev_dependencies
|
||||
@b_1 = util_spec 'b', 1 do |s| s.add_development_dependency 'a', '1' end
|
||||
@c_1 = util_spec 'c', 1 do |s| s.add_development_dependency 'a', '2' end
|
||||
|
||||
install_gem @b_1
|
||||
install_gem @c_1
|
||||
|
||||
@cmd.handle_options %w[--no-check-development]
|
||||
|
||||
@cmd.execute
|
||||
|
||||
refute_path_exists @a_1.gem_dir
|
||||
end
|
||||
|
||||
def test_execute_all
|
||||
gemhome2 = File.join @tempdir, 'gemhome2'
|
||||
|
||||
|
|
|
@ -27,6 +27,67 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
|||
open 'bundler/exe/bundle', 'w' do |io| io.puts '# bundle' end
|
||||
open 'bundler/lib/bundler.rb', 'w' do |io| io.puts '# bundler.rb' end
|
||||
open 'bundler/lib/bundler/b.rb', 'w' do |io| io.puts '# b.rb' end
|
||||
|
||||
FileUtils.mkdir_p 'default/gems'
|
||||
|
||||
gemspec = Gem::Specification.new
|
||||
gemspec.name = "bundler"
|
||||
gemspec.version = "1.16.0"
|
||||
gemspec.bindir = "exe"
|
||||
gemspec.executables = ["bundle"]
|
||||
|
||||
open 'bundler/bundler.gemspec', 'w' do |io|
|
||||
io.puts gemspec.to_ruby
|
||||
end
|
||||
|
||||
open(File.join(Gem::Specification.default_specifications_dir, "bundler-1.15.4.gemspec"), 'w') do |io|
|
||||
io.puts '# bundler'
|
||||
end
|
||||
|
||||
FileUtils.mkdir_p File.join(Gem.default_dir, "specifications")
|
||||
open(File.join(Gem.default_dir, "specifications", "bundler-audit-1.0.0.gemspec"), 'w') do |io|
|
||||
io.puts '# bundler-audit'
|
||||
end
|
||||
|
||||
FileUtils.mkdir_p 'default/gems/bundler-1.15.4'
|
||||
FileUtils.mkdir_p 'default/gems/bundler-audit-1.0.0'
|
||||
end
|
||||
|
||||
def gem_install name
|
||||
gem = util_spec name do |s|
|
||||
s.executables = [name]
|
||||
s.files = %W[bin/#{name}]
|
||||
end
|
||||
write_file File.join @tempdir, 'bin', name do |f|
|
||||
f.puts '#!/usr/bin/ruby'
|
||||
end
|
||||
install_gem gem
|
||||
File.join @gemhome, 'bin', name
|
||||
end
|
||||
|
||||
def test_execute_regenerate_binstubs
|
||||
gem_bin_path = gem_install 'a'
|
||||
write_file gem_bin_path do |io|
|
||||
io.puts 'I changed it!'
|
||||
end
|
||||
|
||||
@cmd.options[:document] = []
|
||||
@cmd.execute
|
||||
|
||||
assert_match %r{\A#!}, File.read(gem_bin_path)
|
||||
end
|
||||
|
||||
def test_execute_no_regenerate_binstubs
|
||||
gem_bin_path = gem_install 'a'
|
||||
write_file gem_bin_path do |io|
|
||||
io.puts 'I changed it!'
|
||||
end
|
||||
|
||||
@cmd.options[:document] = []
|
||||
@cmd.options[:regenerate_binstubs] = false
|
||||
@cmd.execute
|
||||
|
||||
assert_equal "I changed it!\n", File.read(gem_bin_path)
|
||||
end
|
||||
|
||||
def test_pem_files_in
|
||||
|
@ -55,6 +116,33 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_install_default_bundler_gem
|
||||
@cmd.extend FileUtils
|
||||
|
||||
@cmd.install_default_bundler_gem
|
||||
|
||||
if Gem.win_platform?
|
||||
bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
|
||||
default_spec_path = File.join(Gem::Specification.default_specifications_dir, "#{bundler_spec.full_name}.gemspec")
|
||||
spec = Gem::Specification.load(default_spec_path)
|
||||
|
||||
spec.executables.each do |e|
|
||||
assert_path_exists File.join(spec.bin_dir, "#{e}.bat")
|
||||
end
|
||||
end
|
||||
|
||||
default_dir = Gem::Specification.default_specifications_dir
|
||||
|
||||
refute_path_exists File.join(default_dir, "bundler-1.15.4.gemspec")
|
||||
refute_path_exists 'default/gems/bundler-1.15.4'
|
||||
|
||||
assert_path_exists File.join(default_dir, "bundler-1.16.0.gemspec")
|
||||
assert_path_exists 'default/gems/bundler-1.16.0'
|
||||
|
||||
assert_path_exists File.join(Gem.default_dir, "specifications", "bundler-audit-1.0.0.gemspec")
|
||||
assert_path_exists 'default/gems/bundler-audit-1.0.0'
|
||||
end if Gem::USE_BUNDLER_FOR_GEMDEPS
|
||||
|
||||
def test_remove_old_lib_files
|
||||
lib = File.join @install_dir, 'lib'
|
||||
lib_rubygems = File.join lib, 'rubygems'
|
||||
|
|
|
@ -27,10 +27,11 @@ class TestGemCommandsSigninCommand < Gem::TestCase
|
|||
|
||||
def test_execute_when_already_signed_in_with_same_host
|
||||
host = 'http://some-gemcutter-compatible-host.org'
|
||||
sign_in_ui = util_capture(nil, host) { @cmd.execute }
|
||||
|
||||
util_capture(nil, host) { @cmd.execute }
|
||||
old_credentials = YAML.load_file Gem.configuration.credentials_path
|
||||
|
||||
sign_in_ui = util_capture(nil, host) { @cmd.execute }
|
||||
util_capture(nil, host) { @cmd.execute }
|
||||
new_credentials = YAML.load_file Gem.configuration.credentials_path
|
||||
|
||||
assert_equal old_credentials[host], new_credentials[host]
|
||||
|
@ -38,9 +39,11 @@ class TestGemCommandsSigninCommand < Gem::TestCase
|
|||
|
||||
def test_execute_when_already_signed_in_with_different_host
|
||||
api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf04045xxxx'
|
||||
sign_in_ui = util_capture(nil, nil, api_key) { @cmd.execute }
|
||||
|
||||
util_capture(nil, nil, api_key) { @cmd.execute }
|
||||
host = 'http://some-gemcutter-compatible-host.org'
|
||||
sign_in_ui = util_capture(nil, host, api_key) { @cmd.execute }
|
||||
|
||||
util_capture(nil, host, api_key) { @cmd.execute }
|
||||
credentials = YAML.load_file Gem.configuration.credentials_path
|
||||
|
||||
assert_equal credentials[:rubygems_api_key], api_key
|
||||
|
|
|
@ -54,7 +54,7 @@ class TestGemExtConfigureBuilder < Gem::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
shell_error_msg = %r{(\./configure: .*)|((?:Can't|cannot) open \./configure(?:: No such file or directory)?)}
|
||||
shell_error_msg = %r{(\./configure: .*)|((?:[Cc]an't|cannot) open '?\./configure'?(?:: No such file or directory)?)}
|
||||
sh_prefix_configure = "sh ./configure --prefix="
|
||||
|
||||
assert_match 'configure failed', error.message
|
||||
|
|
Загрузка…
Ссылка в новой задаче