ruby-changes:53746
From: hsbt <ko1@a...>
Date: Sun, 25 Nov 2018 10:20:07 +0900 (JST)
Subject: [ruby-changes:53746] hsbt:r65963 (trunk): Use stub executables generated by RubyGems istead of original executables.
hsbt 2018-11-25 10:20:00 +0900 (Sun, 25 Nov 2018) New Revision: 65963 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=65963 Log: Use stub executables generated by RubyGems istead of original executables. It resolved the conflict issues when invoking `gem i rdoc` and the binstub issues with Bundler and Rails. [Bug #5060][ruby-core:38257][Fix GH-2023] * https://github.com/rubygems/rubygems/pull/2338 * https://github.com/heroku/heroku-buildpack-ruby/issues/829 Added directories: trunk/libexec/ Added files: trunk/libexec/bundle trunk/libexec/bundle_ruby trunk/libexec/bundler trunk/libexec/irb trunk/libexec/rdoc trunk/libexec/ri Modified files: trunk/bin/bundle trunk/bin/bundle_ruby trunk/bin/bundler trunk/bin/irb trunk/bin/rdoc trunk/bin/ri trunk/common.mk trunk/lib/bundler.gemspec trunk/spec/bundler/spec_helper.rb trunk/spec/bundler/support/path.rb trunk/tool/rbinstall.rb Index: common.mk =================================================================== --- common.mk (revision 65962) +++ common.mk (revision 65963) @@ -542,15 +542,15 @@ post-install-gem:: https://github.com/ruby/ruby/blob/trunk/common.mk#L542 rdoc: PHONY main @echo Generating RDoc documentation - $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --root "$(srcdir)" --page-dir "$(srcdir)/doc" --encoding=UTF-8 --no-force-update --all --ri --op "$(RDOCOUT)" $(RDOCFLAGS) "$(srcdir)" + $(Q) $(XRUBY) "$(srcdir)/libexec/rdoc" --root "$(srcdir)" --page-dir "$(srcdir)/doc" --encoding=UTF-8 --no-force-update --all --ri --op "$(RDOCOUT)" $(RDOCFLAGS) "$(srcdir)" html: PHONY main @echo Generating RDoc HTML files - $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --root "$(srcdir)" --page-dir "$(srcdir)/doc" --encoding=UTF-8 --no-force-update --all --op "$(HTMLOUT)" $(RDOCFLAGS) "$(srcdir)" + $(Q) $(XRUBY) "$(srcdir)/libexec/rdoc" --root "$(srcdir)" --page-dir "$(srcdir)/doc" --encoding=UTF-8 --no-force-update --all --op "$(HTMLOUT)" $(RDOCFLAGS) "$(srcdir)" rdoc-coverage: PHONY main @echo Generating RDoc coverage report - $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --root "$(srcdir)" --encoding=UTF-8 --all --quiet -C $(RDOCFLAGS) "$(srcdir)" + $(Q) $(XRUBY) "$(srcdir)/libexec/rdoc" --root "$(srcdir)" --encoding=UTF-8 --all --quiet -C $(RDOCFLAGS) "$(srcdir)" RDOCBENCHOUT=/tmp/rdocbench Index: spec/bundler/spec_helper.rb =================================================================== --- spec/bundler/spec_helper.rb (revision 65962) +++ spec/bundler/spec_helper.rb (revision 65963) @@ -131,6 +131,12 @@ RSpec.configure do |config| https://github.com/ruby/ruby/blob/trunk/spec/bundler/spec_helper.rb#L131 Gem.ruby = orig_ruby if ENV["BUNDLE_RUBY"] end + config.before :suite do + if ENV["BUNDLE_RUBY"] + FileUtils.cp_r Spec::Path.bindir, File.join(Spec::Path.root, "lib", "exe") + end + end + config.before :all do build_repo1 end @@ -155,4 +161,10 @@ RSpec.configure do |config| https://github.com/ruby/ruby/blob/trunk/spec/bundler/spec_helper.rb#L161 Dir.chdir(original_wd) ENV.replace(original_env) end + + config.after :suite do + if ENV["BUNDLE_RUBY"] + FileUtils.rm_rf File.join(Spec::Path.root, "lib", "exe") + end + end end Index: spec/bundler/support/path.rb =================================================================== --- spec/bundler/support/path.rb (revision 65962) +++ spec/bundler/support/path.rb (revision 65963) @@ -13,7 +13,7 @@ module Spec https://github.com/ruby/ruby/blob/trunk/spec/bundler/support/path.rb#L13 end def bindir - @bindir ||= root.join(ruby_core? ? "bin" : "exe") + @bindir ||= root.join(ruby_core? ? "libexec" : "exe") end def spec_dir Index: bin/rdoc =================================================================== --- bin/rdoc (revision 65962) +++ bin/rdoc (revision 65963) @@ -1,44 +1,27 @@ https://github.com/ruby/ruby/blob/trunk/bin/rdoc#L1 #!/usr/bin/env ruby # -# RDoc: Documentation tool for source code -# (see lib/rdoc/rdoc.rb for more information) +# This file was generated by RubyGems. +# +# The application 'rdoc' is installed as part of a gem, and +# this file is here to facilitate running it. # -# Copyright (c) 2003 Dave Thomas -# Released under the same terms as Ruby -begin - gem 'rdoc' -rescue NameError => e # --disable-gems - raise unless e.name == :gem -rescue Gem::LoadError -end +require 'rubygems' -require 'rdoc/rdoc' +version = ">= 0.a" -begin - r = RDoc::RDoc.new - r.document ARGV -rescue Errno::ENOSPC - $stderr.puts 'Ran out of space creating documentation' - $stderr.puts - $stderr.puts 'Please free up some space and try again' -rescue SystemExit - raise -rescue Exception => e - if $DEBUG_RDOC then - $stderr.puts e.message - $stderr.puts "#{e.backtrace.join "\n\t"}" - $stderr.puts - elsif Interrupt === e then - $stderr.puts - $stderr.puts 'Interrupted' - else - $stderr.puts "uh-oh! RDoc had a problem:" - $stderr.puts e.message - $stderr.puts - $stderr.puts "run with --debug for full backtrace" +if ARGV.first + str = ARGV.first + str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding + if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then + version = $1 + ARGV.shift end - - exit 1 end +if Gem.respond_to?(:activate_bin_path) +load Gem.activate_bin_path('rdoc', 'rdoc', version) +else +gem "rdoc", version +load Gem.bin_path("rdoc", "rdoc", version) +end Index: bin/bundle =================================================================== --- bin/bundle (revision 65962) +++ bin/bundle (revision 65963) @@ -1,31 +1,27 @@ https://github.com/ruby/ruby/blob/trunk/bin/bundle#L1 #!/usr/bin/env ruby -# frozen_string_literal: true +# +# This file was generated by RubyGems. +# +# The application 'bundler' is installed as part of a gem, and +# this file is here to facilitate running it. +# -# Exit cleanly from an early interrupt -Signal.trap("INT") do - Bundler.ui.debug("\n#{caller.join("\n")}") if defined?(Bundler) - exit 1 -end - -require "bundler" -# Check if an older version of bundler is installed -$LOAD_PATH.each do |path| - next unless path =~ %r{/bundler-0\.(\d+)} && $1.to_i < 9 - err = String.new - err << "Looks like you have a version of bundler that's older than 0.9.\n" - err << "Please remove your old versions.\n" - err << "An easy way to do this is by running `gem cleanup bundler`." - abort(err) -end +require 'rubygems' -require "bundler/friendly_errors" -Bundler.with_friendly_errors do - require "bundler/cli" +version = ">= 0.a" - # Allow any command to use --help flag to show help for that command - help_flags = %w[--help -h] - help_flag_used = ARGV.any? {|a| help_flags.include? a } - args = help_flag_used ? Bundler::CLI.reformatted_help_args(ARGV) : ARGV +if ARGV.first + str = ARGV.first + str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding + if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then + version = $1 + ARGV.shift + end +end - Bundler::CLI.start(args, :debug => true) +if Gem.respond_to?(:activate_bin_path) +load Gem.activate_bin_path('bundler', 'bundle', version) +else +gem "bundler", version +load Gem.bin_path("bundler", "bundle", version) end Index: bin/bundle_ruby =================================================================== --- bin/bundle_ruby (revision 65962) +++ bin/bundle_ruby (revision 65963) @@ -1,60 +1,27 @@ https://github.com/ruby/ruby/blob/trunk/bin/bundle_ruby#L1 #!/usr/bin/env ruby -# frozen_string_literal: true - -require "bundler/shared_helpers" - -Bundler::SharedHelpers.major_deprecation(3, "the bundle_ruby executable has been removed in favor of `bundle platform --ruby`") - -Signal.trap("INT") { exit 1 } - -require "bundler/errors" -require "bundler/ruby_version" -require "bundler/ruby_dsl" - -module Bundler - class Dsl - include RubyDsl - - attr_accessor :ruby_version - - def initialize - @ruby_version = nil - end - - def eval_gemfile(gemfile, contents = nil) - contents ||= File.open(gemfile, "rb", &:read) - instance_eval(contents, gemfile.to_s, 1) - rescue SyntaxError => e - bt = e.message.split("\n")[1..-1] - raise GemfileError, ["Gemfile syntax error:", *bt].join("\n") - rescue ScriptError, RegexpError, NameError, ArgumentError => e - e.backtrace[0] = "#{e.backtrace[0]}: #{e.message} (#{e.class})" - STDERR.puts e.backtrace.join("\n ") - raise GemfileError, "There was an error in your Gemfile," \ - " and Bundler cannot continue." - end - - def source(source, options = {}) - end - - def gem(name, *args) - end - - def group(*args) - end +# +# This file was generated by RubyGems. +# +# The application 'bundler' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require 'rubygems' + +version = ">= 0.a" + +if ARGV.first + str = ARGV.first + str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding + if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then + version = $1 + ARGV.shift end end -dsl = Bundler::Dsl.new -begin - dsl.eval_gemfile(Bundler::SharedHelpers.default_gemfile) - ruby_version = dsl.ruby_version - if ruby_version - puts ruby_version - else - puts "No ruby version specified" - end -rescue Bundler::GemfileError => e - puts e.message - exit(-1) +if Gem.respond_to?(:activate_bin_path) +load Gem.activate_bin_path('bundler', 'bundle_ruby', version) +else +gem "bundler", version +load Gem.bin_path("bundler", "bundle_ruby", version) end Index: bin/ri =================================================================== --- bin/ri (revision 65962) +++ bin/ri (revision 65963) @@ -1,12 +1,27 @@ https://github.com/ruby/ruby/blob/trunk/bin/ri#L1 #!/usr/bin/env ruby +# +# This file was generated by RubyGems. +# +# The application 'rdoc' is installed as part of a gem, and +# this file is here to facilitate running it. +# -begin - gem 'rdoc' -rescue NameError => e # --disable-gems - raise unless e.name == :gem -rescue Gem::LoadError -end +require 'rubygems' + +version = ">= 0.a" -require 'rdoc/ri/driver' +if ARGV.first + str = ARGV.first + str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding + if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then + version = $1 + ARGV.shift + end +end -RDoc::RI::Driver.run ARGV +if Gem.respond_to?(:activate_bin_path) +load Gem.activate_bin_path('rdoc', 'ri', version) +else +gem "rdoc", version +load Gem.bin_path("rdoc", "ri", version) +end Index: bin/bundler =================================================================== --- bin/bundler (revision 65962) +++ bin/bundler (revision 65963) @@ -1,4 +1,27 @@ https://github.com/ruby/ruby/blob/trunk/bin/bundler#L1 #!/usr/bin/env ruby -# frozen_string_literal: true +# +# This file was generated by RubyGems. +# +# The application 'bundler' is installed as part of a gem, and +# this file is here to facilitate running it. +# -load File.expand_path("../bundle", __FILE__) +require 'rubygems' + +version = ">= 0.a" + +if ARGV.first + str = ARGV.first + str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding + if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then + version = $1 + ARGV.shift + end +end + +if Gem.respond_to?(:activate_bin_path) +load Gem.activate_bin_path('bundler', 'bundler', version) +else +gem "bundler", version +load Gem.bin_path("bundler", "bundler", version) +end Index: bin/irb =================================================================== --- bin/irb (revision 65962) +++ bin/irb (revision 65963) @@ -1,11 +1,27 @@ https://github.com/ruby/ruby/blob/trunk/bin/irb#L1 #!/usr/bin/env ruby # -# irb.rb - interactive ruby -# $Release Version: 0.9.6 $ -# $Revision$ -# by Keiju ISHITSUKA(keiju@r...) +# This file was generated by RubyGems. # +# The application 'irb' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require 'rubygems' + +version = ">= 0.a" -require "irb" +if ARGV.first + str = ARGV.first + str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding + if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then + version = $1 + ARGV.shift + end +end -IRB.start(__FILE__) +if Gem.respond_to?(:activate_bin_path) +load Gem.activate_bin_path('irb', 'irb', version) +else +gem "irb", version +load Gem.bin_path("irb", "irb", version) +end Index: tool/rbinstall.rb =================================================================== --- tool/rbinstall.rb (revision 65962) +++ tool/rbinstall.rb (revision 65963) @@ -781,7 +781,7 @@ def install_default_gem(dir, srcdir) https://github.com/ruby/ruby/blob/trunk/tool/rbinstall.rb#L781 makedirs(bin_dir) gemspec.executables.map {|exec| - $script_installer.install(File.join(srcdir, 'bin', exec), + $script_installer.install(File.join(srcdir, 'libexec', exec), File.join(bin_dir, exec)) } end Index: lib/bundler.gemspec =================================================================== --- lib/bundler.gemspec (revision 65962) +++ lib/bundler.gemspec (revision 65963) @@ -58,7 +58,7 @@ Gem::Specification.new do |s| https://github.com/ruby/ruby/blob/trunk/lib/bundler.gemspec#L58 # include the gemspec itself because warbler breaks w/o it s.files += %w[bundler.gemspec] - # s.bindir = "exe" - # s.executables = %w[bundle bundler] + s.bindir = "exe" + s.executables = %w[bundle bundler] s.require_paths = ["lib"] end Index: libexec/rdoc =================================================================== --- libexec/rdoc (nonexistent) +++ libexec/rdoc (revision 65963) @@ -0,0 +1,44 @@ https://github.com/ruby/ruby/blob/trunk/libexec/rdoc#L1 +#!/usr/bin/env ruby +# +# RDoc: Documentation tool for source code +# (see lib/rdoc/rdoc.rb for more information) +# +# Copyright (c) 2003 Dave Thomas +# Released under the same terms as Ruby + +begin + gem 'rdoc' +rescue NameError => e # --disable-gems + raise unless e.name == :gem +rescue Gem::LoadError +end + +require 'rdoc/rdoc' + +begin + r = RDoc::RDoc.new + r.document ARGV +rescue Errno::ENOSPC + $stderr.puts 'Ran out of space creating documentation' + $stderr.puts + $stderr.puts 'Please free up some space and try again' +rescue SystemExit + raise +rescue Exception => e + if $DEBUG_RDOC then + $stderr.puts e.message + $stderr.puts "#{e.backtrace.join "\n\t"}" + $stderr.puts + elsif Interrupt === e then + $stderr.puts + $stderr.puts 'Interrupted' + else + $stderr.puts "uh-oh! RDoc had a problem:" + $stderr.puts e.message + $stderr.puts + $stderr.puts "run with --debug for full backtrace" + end + + exit 1 +end + Property changes on: libexec/rdoc ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +LF \ No newline at end of property Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Revision \ No newline at end of property Index: libexec/bundle =================================================================== --- libexec/bundle (nonexistent) +++ libexec/bundle (revision 65963) @@ -0,0 +1,31 @@ https://github.com/ruby/ruby/blob/trunk/libexec/bundle#L1 +#!/usr/bin/env ruby +# frozen_string_literal: true + +# Exit cleanly from an early interrupt +Signal.trap("INT") do + Bundler.ui.debug("\n#{caller.join("\n")}") if defined?(Bundler) + exit 1 +end + +require "bundler" +# Check if an older version of bundler is installed +$LOAD_PATH.each do |path| + next unless path =~ %r{/bundler-0\.(\d+)} && $1.to_i < 9 + err = String.new + err << "Looks like you have a version of bundler that's older than 0.9.\n" + err << "Please remove your old versions.\n" + err << "An easy way to do this is by running `gem cleanup bundler`." + abort(err) +end + +require "bundler/friendly_errors" +Bundler.with_friendly_errors do + require "bundler/cli" + + # Allow any command to use --help flag to show help for that command + help_flags = %w[--help -h] + help_flag_used = ARGV.any? {|a| help_flags.include? a } + args = help_flag_used ? Bundler::CLI.reformatted_help_args(ARGV) : ARGV + + Bundler::CLI.start(args, :debug => true) +end Property changes on: libexec/bundle ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: libexec/bundle_ruby =================================================================== --- libexec/bundle_ruby (nonexistent) +++ libexec/bundle_ruby (revision 65963) @@ -0,0 +1,60 @@ https://github.com/ruby/ruby/blob/trunk/libexec/bundle_ruby#L1 +#!/usr/bin/env ruby +# frozen_string_literal: true + +require "bundler/shared_helpers" + +Bundler::SharedHelpers.major_deprecation(3, "the bundle_ruby executable has been removed in favor of `bundle platform --ruby`") + +Signal.trap("INT") { exit 1 } + +require "bundler/errors" +require "bundler/ruby_version" +require "bundler/ruby_dsl" + +module Bundler + class Dsl + include RubyDsl + + attr_accessor :ruby_version + + def initialize + @ruby_version = nil + end + + def eval_gemfile(gemfile, contents = nil) + contents ||= File.open(gemfile, "rb", &:read) + instance_eval(contents, gemfile.to_s, 1) + rescue SyntaxError => e + bt = e.message.split("\n")[1..-1] + raise GemfileError, ["Gemfile syntax error:", *bt].join("\n") + rescue ScriptError, RegexpError, NameError, ArgumentError => e + e.backtrace[0] = "#{e.backtrace[0]}: #{e.message} (#{e.class})" + STDERR.puts e.backtrace.join("\n ") + raise GemfileError, "There was an error in your Gemfile," \ + " and Bundler cannot continue." + end + + def source(source, options = {}) + end + + def gem(name, *args) + end + + def group(*args) + end + end +end + +dsl = Bundler::Dsl.new +begin + dsl.eval_gemfile(Bundler::SharedHelpers.default_gemfile) + ruby_version = dsl.ruby_version + if ruby_version + puts ruby_version + else + puts "No ruby version specified" + end +rescue Bundler::GemfileError => e + puts e.message + exit(-1) +end Property changes on: libexec/bundle_ruby ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +LF \ No newline at end of property Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: libexec/ri =================================================================== --- libexec/ri (nonexistent) +++ libexec/ri (revision 65963) @@ -0,0 +1,12 @@ https://github.com/ruby/ruby/blob/trunk/libexec/ri#L1 +#!/usr/bin/env ruby + +begin + gem 'rdoc' +rescue NameError => e # --disable-gems + raise unless e.name == :gem +rescue Gem::LoadError +end + +require 'rdoc/ri/driver' + +RDoc::RI::Driver.run ARGV Property changes on: libexec/ri ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +LF \ No newline at end of property Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: libexec/bundler =================================================================== --- libexec/bundler (nonexistent) +++ libexec/bundler (revision 65963) @@ -0,0 +1,4 @@ https://github.com/ruby/ruby/blob/trunk/libexec/bundler#L1 +#!/usr/bin/env ruby +# frozen_string_literal: true + +load File.expand_path("../bundle", __FILE__) Property changes on: libexec/bundler ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: libexec/irb =================================================================== --- libexec/irb (nonexistent) +++ libexec/irb (revision 65963) @@ -0,0 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/libexec/irb#L1 +#!/usr/bin/env ruby +# +# irb.rb - interactive ruby +# $Release Version: 0.9.6 $ +# $Revision$ +# by Keiju ISHITSUKA(keiju@r...) +# + +require "irb" + +IRB.start(__FILE__) Property changes on: libexec/irb ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +LF \ No newline at end of property Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Revision \ No newline at end of property -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/