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:
hsbt 2017-11-28 22:30:28 +00:00
Родитель 89bfee6fd4
Коммит e82802070a
9 изменённых файлов: 212 добавлений и 23 удалений

Просмотреть файл

@ -10,7 +10,7 @@ require 'rbconfig'
require 'thread' require 'thread'
module Gem module Gem
VERSION = "2.7.2" VERSION = "2.7.3"
end end
# Must be first since it unloads the prelude from 1.9.2 # 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 # 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 # $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 # 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 # Gem::find_files and then loaded.
# plugin file may be loaded multiple times if multiple versions of your gem
# are installed.
# #
# For an example plugin, see the {Graph gem}[https://github.com/seattlerb/graph] # For an example plugin, see the {Graph gem}[https://github.com/seattlerb/graph]
# which adds a `gem graph` command. # which adds a `gem graph` command.

Просмотреть файл

@ -8,13 +8,20 @@ class Gem::Commands::CleanupCommand < Gem::Command
def initialize def initialize
super 'cleanup', super 'cleanup',
'Clean up old versions of installed gems', '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', add_option('-n', '-d', '--dryrun',
'Do not uninstall gems') do |value, options| 'Do not uninstall gems') do |value, options|
options[:dryrun] = true options[:dryrun] = true
end 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 @candidate_gems = nil
@default_gems = [] @default_gems = []
@full = nil @full = nil
@ -138,7 +145,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
end end
def uninstall_dep spec 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 if options[:dryrun] then
say "Dry Run Mode: Would uninstall #{spec.full_name}" say "Dry Run Mode: Would uninstall #{spec.full_name}"

Просмотреть файл

@ -82,11 +82,7 @@ class Gem::Commands::SetupCommand < Gem::Command
add_option '--[no-]regenerate-binstubs', add_option '--[no-]regenerate-binstubs',
'Regenerate gem binstubs' do |value, options| 'Regenerate gem binstubs' do |value, options|
if value then options[:regenerate_binstubs] = value
options[:regenerate_binstubs] = true
else
options.delete(:regenerate_binstubs)
end
end end
@verbose = nil @verbose = nil
@ -156,7 +152,7 @@ By default, this RubyGems will install gem as:
say "RubyGems #{Gem::VERSION} installed" say "RubyGems #{Gem::VERSION} installed"
regenerate_binstubs regenerate_binstubs if options[:regenerate_binstubs]
uninstall_old_gemcutter uninstall_old_gemcutter
@ -357,7 +353,7 @@ By default, this RubyGems will install gem as:
mkdir_p Gem::Specification.default_specifications_dir mkdir_p Gem::Specification.default_specifications_dir
# Workaround for non-git environment. # 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 } File.open('bundler/bundler.gemspec', 'w'){|f| f.write gemspec }
bundler_spec = Gem::Specification.load("bundler/bundler.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) bundler_spec = Gem::Specification.load(default_spec_path)
Dir.entries(bundler_spec.gems_dir). if File.directory? bundler_spec.gems_dir
select {|default_gem| default_gem.start_with?("bundler-") }. Dir.entries(bundler_spec.gems_dir).
each {|default_gem| rm_r File.join(bundler_spec.gems_dir, default_gem) } 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 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) } 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" say "Bundler #{bundler_spec.version} installed"
end end
@ -442,7 +449,7 @@ By default, this RubyGems will install gem as:
# for installation of bundler as default gems # for installation of bundler as default gems
def template_files def template_files
Dir.chdir "bundler/lib" do 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)} select{|f| !File.directory?(f)}
end end
end end
@ -450,7 +457,7 @@ By default, this RubyGems will install gem as:
# for cleanup old bundler files # for cleanup old bundler files
def template_files_in dir def template_files_in dir
Dir.chdir dir do Dir.chdir dir do
(Dir[File.join('templates', '**', '*')] + Dir[File.join('templates', '**', '.*')]). (Dir[File.join('templates', '**', '{*,.*}')]).
select{|f| !File.directory?(f)} select{|f| !File.directory?(f)}
end end
end end

Просмотреть файл

@ -48,9 +48,13 @@ class Gem::Licenses
BSD-3-Clause-Attribution BSD-3-Clause-Attribution
BSD-3-Clause-Clear BSD-3-Clause-Clear
BSD-3-Clause-LBNL 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
BSD-4-Clause-UC BSD-4-Clause-UC
BSD-Protection BSD-Protection
BSD-Source-Code
BSL-1.0 BSL-1.0
Bahyph Bahyph
Barr Barr
@ -126,6 +130,7 @@ class Gem::Licenses
Entessa Entessa
ErlPL-1.1 ErlPL-1.1
Eurosym Eurosym
FSFAP
FSFUL FSFUL
FSFULLR FSFULLR
FTL FTL
@ -137,8 +142,18 @@ class Gem::Licenses
GFDL-1.3 GFDL-1.3
GL2PS GL2PS
GPL-1.0 GPL-1.0
GPL-1.0+
GPL-2.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+
GPL-3.0-with-GCC-exception
GPL-3.0-with-autoconf-exception
Giftware Giftware
Glide Glide
Glulxe Glulxe
@ -152,14 +167,20 @@ class Gem::Licenses
ISC ISC
ImageMagick ImageMagick
Imlib2 Imlib2
Info-ZIP
Intel Intel
Intel-ACPI Intel-ACPI
Interbase-1.0 Interbase-1.0
JSON JSON
JasPer-2.0 JasPer-2.0
LAL-1.2
LAL-1.3
LGPL-2.0 LGPL-2.0
LGPL-2.0+
LGPL-2.1 LGPL-2.1
LGPL-2.1+
LGPL-3.0 LGPL-3.0
LGPL-3.0+
LGPLLR LGPLLR
LPL-1.0 LPL-1.0
LPL-1.02 LPL-1.02
@ -170,6 +191,9 @@ class Gem::Licenses
LPPL-1.3c LPPL-1.3c
Latex2e Latex2e
Leptonica Leptonica
LiLiQ-P-1.1
LiLiQ-R-1.1
LiLiQ-Rplus-1.1
Libpng Libpng
MIT MIT
MIT-CMU MIT-CMU
@ -193,6 +217,7 @@ class Gem::Licenses
NBPL-1.0 NBPL-1.0
NCSA NCSA
NGPL NGPL
NLOD-1.0
NLPL NLPL
NOSL NOSL
NPL-1.0 NPL-1.0
@ -201,11 +226,13 @@ class Gem::Licenses
NRL NRL
NTP NTP
Naumen Naumen
Net-SNMP
NetCDF NetCDF
Newsletr Newsletr
Nokia Nokia
Noweb Noweb
Nunit Nunit
OCCT-PL
OCLC-2.0 OCLC-2.0
ODbL-1.0 ODbL-1.0
OFL-1.0 OFL-1.0
@ -229,6 +256,7 @@ class Gem::Licenses
OLDAP-2.8 OLDAP-2.8
OML OML
OPL-1.0 OPL-1.0
OSET-PL-2.1
OSL-1.0 OSL-1.0
OSL-1.1 OSL-1.1
OSL-2.0 OSL-2.0
@ -259,6 +287,7 @@ class Gem::Licenses
SISSL SISSL
SISSL-1.2 SISSL-1.2
SMLNJ SMLNJ
SMPPL
SNIA SNIA
SPL-1.0 SPL-1.0
SWL SWL
@ -269,12 +298,16 @@ class Gem::Licenses
Spencer-86 Spencer-86
Spencer-94 Spencer-94
Spencer-99 Spencer-99
StandardML-NJ
SugarCRM-1.1.3 SugarCRM-1.1.3
TCL TCL
TCP-wrappers
TMate TMate
TORQUE-1.1 TORQUE-1.1
TOSL TOSL
UPL-1.0 UPL-1.0
Unicode-DFS-2015
Unicode-DFS-2016
Unicode-TOU Unicode-TOU
Unlicense Unlicense
VOSTROM VOSTROM
@ -282,7 +315,9 @@ class Gem::Licenses
Vim Vim
W3C W3C
W3C-19980720 W3C-19980720
W3C-20150513
WTFPL WTFPL
WXwindows
Watcom-1.0 Watcom-1.0
Wsuipa Wsuipa
X11 X11
@ -302,8 +337,10 @@ class Gem::Licenses
Zlib Zlib
bzip2-1.0.5 bzip2-1.0.5
bzip2-1.0.6 bzip2-1.0.6
curl
diffmark diffmark
dvipdfm dvipdfm
eCos-2.0
eGenix eGenix
gSOAP-1.3b gSOAP-1.3b
gnuplot gnuplot

Просмотреть файл

@ -13,6 +13,7 @@ class TestGemCommand < Gem::TestCase
@xopt = nil @xopt = nil
@common_options = Gem::Command.common_options.dup
Gem::Command.common_options.clear Gem::Command.common_options.clear
Gem::Command.common_options << [ Gem::Command.common_options << [
['-x', '--exe', 'Execute'], lambda do |*a| ['-x', '--exe', 'Execute'], lambda do |*a|
@ -24,6 +25,11 @@ class TestGemCommand < Gem::TestCase
@cmd = Gem::Command.new @cmd_name, 'summary' @cmd = Gem::Command.new @cmd_name, 'summary'
end end
def teardown
super
Gem::Command.common_options.replace @common_options
end
def test_self_add_specific_extra_args def test_self_add_specific_extra_args
added_args = %w[--all] added_args = %w[--all]
@cmd.add_option '--all' do |v,o| end @cmd.add_option '--all' do |v,o| end

Просмотреть файл

@ -32,6 +32,21 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
assert @cmd.options[:dryrun] assert @cmd.options[:dryrun]
end 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 def test_execute
@cmd.options[:args] = %w[a] @cmd.options[:args] = %w[a]
@ -55,6 +70,34 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
refute_path_exists @b_1.gem_dir refute_path_exists @b_1.gem_dir
end 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 def test_execute_all
gemhome2 = File.join @tempdir, 'gemhome2' 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/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.rb', 'w' do |io| io.puts '# bundler.rb' end
open 'bundler/lib/bundler/b.rb', 'w' do |io| io.puts '# b.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 end
def test_pem_files_in def test_pem_files_in
@ -55,6 +116,33 @@ class TestGemCommandsSetupCommand < Gem::TestCase
end end
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 def test_remove_old_lib_files
lib = File.join @install_dir, 'lib' lib = File.join @install_dir, 'lib'
lib_rubygems = File.join lib, 'rubygems' lib_rubygems = File.join lib, 'rubygems'

Просмотреть файл

@ -27,10 +27,11 @@ class TestGemCommandsSigninCommand < Gem::TestCase
def test_execute_when_already_signed_in_with_same_host def test_execute_when_already_signed_in_with_same_host
host = 'http://some-gemcutter-compatible-host.org' 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 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 new_credentials = YAML.load_file Gem.configuration.credentials_path
assert_equal old_credentials[host], new_credentials[host] 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 def test_execute_when_already_signed_in_with_different_host
api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf04045xxxx' 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' 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 credentials = YAML.load_file Gem.configuration.credentials_path
assert_equal credentials[:rubygems_api_key], api_key assert_equal credentials[:rubygems_api_key], api_key

Просмотреть файл

@ -54,7 +54,7 @@ class TestGemExtConfigureBuilder < Gem::TestCase
end end
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=" sh_prefix_configure = "sh ./configure --prefix="
assert_match 'configure failed', error.message assert_match 'configure failed', error.message