From mboxrd@z Thu Jan 1 00:00:00 1970 From: rlane@club.cc.cmu.edu (Rich Lane) Date: Sun, 16 Aug 2009 23:39:14 -0700 Subject: [sup-talk] [PATCH 4/5] console: reload In-Reply-To: <1250491155-19281-3-git-send-email-rlane@club.cc.cmu.edu> References: <1250491155-19281-1-git-send-email-rlane@club.cc.cmu.edu> <1250491155-19281-2-git-send-email-rlane@club.cc.cmu.edu> <1250491155-19281-3-git-send-email-rlane@club.cc.cmu.edu> Message-ID: <1250491155-19281-4-git-send-email-rlane@club.cc.cmu.edu> --- lib/sup/modes/console-mode.rb | 30 ++++++++++++++++++++++++++++++ 1 files changed, 30 insertions(+), 0 deletions(-) diff --git a/lib/sup/modes/console-mode.rb b/lib/sup/modes/console-mode.rb index c794a4c..c344fa6 100644 --- a/lib/sup/modes/console-mode.rb +++ b/lib/sup/modes/console-mode.rb @@ -21,6 +21,36 @@ class Console def xapian; Index.instance.instance_variable_get :@xapian; end def ferret; Index.instance.instance_variable_get :@index; end + + ## files that won't cause problems when reloaded + ## TODO expand this list / convert to blacklist + RELOAD_WHITELIST = %w(sup/xapian_index.rb sup/modes/console-mode.rb) + + def reload + old_verbose = $VERBOSE + $VERBOSE = nil + old_features = $".dup + begin + fs = $".grep(/^sup\//) + fs.reject! { |f| not RELOAD_WHITELIST.member? f } + fs.each { |f| $".delete f } + fs.each do |f| + @mode << "reloading #{f}\n" + begin + require f + rescue LoadError => e + raise unless e.message =~ /no such file to load/ + end + end + rescue Exception + $".clear + $".concat old_features + raise + ensure + $VERBOSE = old_verbose + end + true + end end class ConsoleMode < LogMode -- 1.6.4