[macruby-changes] [4489] MacRuby/trunk/lib/rubygems/installer.rb
source_changes at macosforge.org
source_changes at macosforge.org
Wed Sep 1 19:16:15 PDT 2010
Revision: 4489
http://trac.macosforge.org/projects/ruby/changeset/4489
Author: martinlagardette at apple.com
Date: 2010-09-01 19:16:14 -0700 (Wed, 01 Sep 2010)
Log Message:
-----------
macgem asks confirmation before overriding binaries w/ different shebang
- Fixes #766
Modified Paths:
--------------
MacRuby/trunk/lib/rubygems/installer.rb
Modified: MacRuby/trunk/lib/rubygems/installer.rb
===================================================================
--- MacRuby/trunk/lib/rubygems/installer.rb 2010-09-01 23:21:37 UTC (rev 4488)
+++ MacRuby/trunk/lib/rubygems/installer.rb 2010-09-02 02:16:14 UTC (rev 4489)
@@ -37,6 +37,7 @@
# Raised when there is an error while building extensions.
#
class ExtensionBuildError < Gem::InstallError; end
+ class GenerateBinaryError < Gem::InstallError; end
include Gem::UserInteraction
@@ -321,20 +322,36 @@
# HACK some gems don't have #! in their executables, restore 2008/06
#if File.read(exec_path, 2) == '#!' then
- FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
+ # FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
- File.open bin_script_path, 'w', 0755 do |file|
+ bin_script_exists = File.exists?(bin_script_path)
+ new_shebang = shebang(filename)
+ File.open bin_script_path, 'r+', 0755 do |file|
+ if bin_script_exists
+ # If the first line is different than the shebang we want to insert
+ # we are probably overwriting a script installed by another ruby
+ # implementation / version
+ if file.readline.chomp != new_shebang
+ warn = <<-WARN_MESSAGE
+You are installing a new version of #{bin_script_path}.
+This file already exists with a different shebang, possibly from a different
+ruby implementation or version. This operation may break the script.
+WARN_MESSAGE
+ alert_warning(warn)
+ if not ask_yes_no("Do you still wish to continue?")
+ raise GenerateBinaryError, "Could not write #{bin_script_path}"
+ end
+ say "Overwrote #{bin_script_path}" if Gem.configuration.really_verbose
+ end
+ file.seek(0)
+ file.truncate(0)
+ end
file.print app_script_text(filename)
end
say bin_script_path if Gem.configuration.really_verbose
generate_windows_script bindir, filename
- #else
- # FileUtils.rm_f bin_script_path
- # FileUtils.cp exec_path, bin_script_path,
- # :verbose => Gem.configuration.really_verbose
- #end
end
##
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100901/9fed5e82/attachment-0001.html>
More information about the macruby-changes
mailing list