summaryrefslogtreecommitdiff
path: root/lib/rubygems/user_interaction.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/user_interaction.rb')
-rw-r--r--lib/rubygems/user_interaction.rb28
1 files changed, 15 insertions, 13 deletions
diff --git a/lib/rubygems/user_interaction.rb b/lib/rubygems/user_interaction.rb
index 390d0f2aea..cacd782e08 100644
--- a/lib/rubygems/user_interaction.rb
+++ b/lib/rubygems/user_interaction.rb
@@ -7,11 +7,6 @@
require 'rubygems/util'
-begin
- require 'io/console'
-rescue LoadError
-end
-
##
# Module that defines the default UserInteraction. Any class including this
# module will have access to the +ui+ method that returns the default UI.
@@ -314,12 +309,21 @@ class Gem::StreamUI
password
end
- if IO.method_defined?(:noecho) then
- def _gets_noecho
- @ins.noecho {@ins.gets}
+ def require_io_console
+ @require_io_console ||= begin
+ begin
+ require 'io/console'
+ rescue LoadError
+ end
+ true
end
- elsif Gem.win_platform?
- def _gets_noecho
+ end
+
+ def _gets_noecho
+ require_io_console
+ if IO.method_defined?(:noecho) then
+ @ins.noecho {@ins.gets}
+ elsif Gem.win_platform?
require "Win32API"
password = ''
@@ -332,9 +336,7 @@ class Gem::StreamUI
end
end
password
- end
- else
- def _gets_noecho
+ else
system "stty -echo"
begin
@ins.gets