Permalink
Browse files

Work around Readline clash

Only limited debugging functionality is available to things that involve
the Readline formula, but it is better than crashing outright.

c.f. #15776.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
  • Loading branch information...
1 parent 11a492e commit 7eeef076b56167803005e7bb4dc6c8f00aa5822c @jacknagel jacknagel committed Nov 12, 2012
Showing with 14 additions and 7 deletions.
  1. +8 −7 Library/Homebrew/debrew.rb
  2. +6 −0 Library/Homebrew/formula_installer.rb
View
15 Library/Homebrew/debrew.rb
@@ -1,9 +1,10 @@
-require 'irb'
-begin
- require 'continuation' # needed on 1.9
-rescue LoadError
+def can_use_readline?
+ not ENV['HOMEBREW_NO_READLINE']
end
+require 'irb' if can_use_readline?
+require 'continuation' if RUBY_VERSION.to_f >= 1.9
+
class Menu
attr_accessor :prompt
attr_accessor :entries
@@ -75,7 +76,7 @@ def IRB.start_within(binding)
irb_at_exit
end
end
-end
+end if can_use_readline?
class Exception
attr_accessor :continuation
@@ -92,7 +93,7 @@ def has_debugger?
true
rescue LoadError
false
- end
+ end if can_use_readline?
end
def debrew(exception, formula=nil)
@@ -121,7 +122,7 @@ def debrew(exception, formula=nil)
end
}
end
- end
+ end if can_use_readline?
menu.choice(:shell) do
puts "When you exit this shell, you will return to the menu."
interactive_shell formula
View
6 Library/Homebrew/formula_installer.rb
@@ -73,6 +73,12 @@ def install
needed_deps = []
needed_reqs = []
+ # HACK: If readline is present in the dependency tree, it will clash
+ # with the stdlib's Readline module when the debugger is loaded
+ if f.recursive_deps.any? { |d| d.name == "readline" } and ARGV.debug?
+ ENV['HOMEBREW_NO_READLINE'] = '1'
+ end
+
ARGV.filter_for_dependencies do
needed_deps = f.recursive_deps.reject{ |d| d.installed? }
needed_reqs = f.recursive_requirements.reject { |r| r.satisfied? }

0 comments on commit 7eeef07

Please sign in to comment.