summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-07-27 03:42:40 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-07-27 03:42:40 +0000
commit76325a8be6e1cef9fe8d2abb403fa4bb2b880ab3 (patch)
treeb9ad19765cdf7a5a8b4026ebf6e101e3aefb4889
parent284144838c798d87ee2d5b30da6c17f764753091 (diff)
* lib/rubygems/uninstaller.rb: Add missing require and update
messaging to avoid confusion with uninstall --format-executable. [Ruby 1.9 - Bug #4062] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@32698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--lib/rubygems/uninstaller.rb20
-rw-r--r--test/rubygems/test_gem_commands_uninstall_command.rb13
-rw-r--r--test/rubygems/test_gem_uninstaller.rb12
4 files changed, 30 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index cde38c3dd7..8add5ef7cf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Jul 27 12:24:17 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/uninstaller.rb: Add missing require and update
+ messaging to avoid confusion with uninstall --format-executable.
+ [Ruby 1.9 - Bug #4062]
+
Wed Jul 27 10:47:57 2011 Eric Hodel <drbrain@segment7.net>
* lib/rubygems: Update to RubyGems 1.8.6.1.
diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb
index 8940980886..cc32ea48c4 100644
--- a/lib/rubygems/uninstaller.rb
+++ b/lib/rubygems/uninstaller.rb
@@ -70,7 +70,7 @@ class Gem::Uninstaller
list = Gem::Specification.find_all_by_name(@gem, @version)
if list.empty? then
- raise Gem::InstallError, "cannot uninstall, check `gem list -d #{@gem}`"
+ raise Gem::InstallError, "gem #{@gem.inspect} is not installed"
elsif list.size > 1 and @force_all then
remove_all list
@@ -141,9 +141,11 @@ class Gem::Uninstaller
return if executables.empty?
+ executables = executables.map { |exec| formatted_program_filename exec }
+
remove = if @force_executables.nil? then
ask_yes_no("Remove executables:\n" \
- "\t#{spec.executables.join ', '}\n\n" \
+ "\t#{executables.join ', '}\n\n" \
"in addition to the gem?",
true)
else
@@ -153,14 +155,17 @@ class Gem::Uninstaller
unless remove then
say "Executables and scripts will remain installed."
else
- bindir = @bin_dir || Gem.bindir(spec.base_dir)
+ bin_dir = @bin_dir || Gem.bindir(spec.base_dir)
- raise Gem::FilePermissionError, bindir unless File.writable? bindir
+ raise Gem::FilePermissionError, bin_dir unless File.writable? bin_dir
- spec.executables.each do |exe_name|
+ executables.each do |exe_name|
say "Removing #{exe_name}"
- FileUtils.rm_f File.join(bindir, formatted_program_filename(exe_name))
- FileUtils.rm_f File.join(bindir, "#{formatted_program_filename(exe_name)}.bat")
+
+ exe_file = File.join bin_dir, exe_name
+
+ FileUtils.rm_f exe_file
+ FileUtils.rm_f "#{exe_file}.bat"
end
end
end
@@ -257,6 +262,7 @@ class Gem::Uninstaller
def formatted_program_filename(filename)
if @format_executable then
+ require 'rubygems/installer'
Gem::Installer.exec_format % File.basename(filename)
else
filename
diff --git a/test/rubygems/test_gem_commands_uninstall_command.rb b/test/rubygems/test_gem_commands_uninstall_command.rb
index a2c11b7216..132c370f11 100644
--- a/test/rubygems/test_gem_commands_uninstall_command.rb
+++ b/test/rubygems/test_gem_commands_uninstall_command.rb
@@ -69,19 +69,6 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
Gem::Installer.exec_format = nil
end
- def test_execute_not_installed
- @cmd.options[:args] = ["foo"]
- e = assert_raises Gem::InstallError do
- use_ui @ui do
- @cmd.execute
- end
- end
-
- assert_match(/\Acannot uninstall, check `gem list -d foo`$/, e.message)
- output = @ui.output.split "\n"
- assert_empty output, "UI output should be empty after an uninstall error"
- end
-
def test_execute_prerelease
@spec = quick_spec "pre", "2.b"
@gem = File.join @tempdir, @spec.file_name
diff --git a/test/rubygems/test_gem_uninstaller.rb b/test/rubygems/test_gem_uninstaller.rb
index a94fc43ff9..aecc4e3807 100644
--- a/test/rubygems/test_gem_uninstaller.rb
+++ b/test/rubygems/test_gem_uninstaller.rb
@@ -94,7 +94,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
exec_path = File.join Gem.user_dir, 'bin', 'foo-executable-bar'
assert_equal false, File.exist?(exec_path), 'removed exec from bin dir'
- assert_equal "Removing executable\n", @ui.output
+ assert_equal "Removing foo-executable-bar\n", @ui.output
ensure
Gem::Installer.exec_format = nil
end
@@ -158,6 +158,16 @@ class TestGemUninstaller < Gem::InstallerTestCase
assert_same uninstaller, @post_uninstall_hook_arg
end
+ def test_uninstall_nonexistent
+ uninstaller = Gem::Uninstaller.new 'bogus', :executables => true
+
+ e = assert_raises Gem::InstallError do
+ uninstaller.uninstall
+ end
+
+ assert_equal 'gem "bogus" is not installed', e.message
+ end
+
def test_uninstall_not_ok
quick_gem 'z' do |s|
s.add_runtime_dependency @spec.name