Merge pull request #11051 from Bo98/better-debrew-raise

debrew: make Debrew::Raise only catch uncaught exceptions
This commit is contained in:
Bo Anderson 2021-04-07 14:39:59 +01:00 committed by GitHub
commit 330158ba10
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 7 deletions

View File

@ -3,6 +3,10 @@
require "mutex_m" require "mutex_m"
require "debrew/irb" require "debrew/irb"
require "warnings"
Warnings.ignore(/warning: callcc is obsolete; use Fiber instead/) do
require "continuation"
end
# Helper module for debugging formulae. # Helper module for debugging formulae.
# #
@ -10,15 +14,26 @@ require "debrew/irb"
module Debrew module Debrew
extend Mutex_m extend Mutex_m
Ignorable = Module.new.freeze # Marks exceptions which can be ignored and provides
# the ability to jump back to where it was raised.
module Ignorable
attr_accessor :continuation
def ignore
continuation.call
end
end
# Module for allowing to ignore exceptions. # Module for allowing to ignore exceptions.
module Raise module Raise
def raise(*) def raise(*)
super callcc do |continuation|
rescue Exception => e # rubocop:disable Lint/RescueException super
e.extend(Ignorable) rescue Exception => e # rubocop:disable Lint/RescueException
super(e) unless Debrew.debug(e) == :ignore e.extend(Ignorable)
e.continuation = continuation
super(e)
end
end end
alias fail raise alias fail raise
@ -105,7 +120,7 @@ module Debrew
rescue SystemExit rescue SystemExit
original_raise original_raise
rescue Exception => e # rubocop:disable Lint/RescueException rescue Exception => e # rubocop:disable Lint/RescueException
debug(e) e.ignore if debug(e) == :ignore # execution jumps back to where the exception was thrown
ensure ensure
@active = false @active = false
end end

View File

@ -9,7 +9,6 @@ require "caveats"
require "cleaner" require "cleaner"
require "formula_cellar_checks" require "formula_cellar_checks"
require "install_renamed" require "install_renamed"
require "debrew"
require "sandbox" require "sandbox"
require "development_tools" require "development_tools"
require "cache_store" require "cache_store"