[前][次][番号順一覧][スレッド一覧]

ruby-changes:12758

From: shyouhei <ko1@a...>
Date: Sun, 9 Aug 2009 17:44:30 +0900 (JST)
Subject: [ruby-changes:12758] Ruby:r24483 (ruby_1_8_7): merge revision(s) 24254:

shyouhei	2009-08-09 17:44:15 +0900 (Sun, 09 Aug 2009)

  New Revision: 24483

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24483

  Log:
    merge revision(s) 24254:
    * lib/irb.rb, lib/irb/init.rb, lib/irb/ext/save-history.rb: add
      IRB::irb_at_exit. no use finalizer saving history. [ruby-dev-38563]

  Modified files:
    branches/ruby_1_8_7/ChangeLog
    branches/ruby_1_8_7/lib/irb/ext/save-history.rb
    branches/ruby_1_8_7/lib/irb/init.rb
    branches/ruby_1_8_7/lib/irb.rb
    branches/ruby_1_8_7/version.h

Index: ruby_1_8_7/ChangeLog
===================================================================
--- ruby_1_8_7/ChangeLog	(revision 24482)
+++ ruby_1_8_7/ChangeLog	(revision 24483)
@@ -1,3 +1,8 @@
+Sun Aug  9 17:43:44 2009  Keiju Ishitsuka  <keiju@r...>
+
+	* lib/irb.rb, lib/irb/init.rb, lib/irb/ext/save-history.rb: add
+	  IRB::irb_at_exit. no use finalizer saving history. [ruby-dev-38563]
+
 Wed Aug  5 15:29:54 2009  NAKAMURA Usaku  <usa@r...>
 
 	* io.c (rb_io_flush): fsync() after buffer is flushed on win32.
Index: ruby_1_8_7/version.h
===================================================================
--- ruby_1_8_7/version.h	(revision 24482)
+++ ruby_1_8_7/version.h	(revision 24483)
@@ -1,15 +1,15 @@
 #define RUBY_VERSION "1.8.7"
-#define RUBY_RELEASE_DATE "2009-08-05"
+#define RUBY_RELEASE_DATE "2009-08-09"
 #define RUBY_VERSION_CODE 187
-#define RUBY_RELEASE_CODE 20090805
-#define RUBY_PATCHLEVEL 195
+#define RUBY_RELEASE_CODE 20090809
+#define RUBY_PATCHLEVEL 196
 
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 8
 #define RUBY_VERSION_TEENY 7
 #define RUBY_RELEASE_YEAR 2009
 #define RUBY_RELEASE_MONTH 8
-#define RUBY_RELEASE_DAY 5
+#define RUBY_RELEASE_DAY 9
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];
Index: ruby_1_8_7/lib/irb/ext/save-history.rb
===================================================================
--- ruby_1_8_7/lib/irb/ext/save-history.rb	(revision 24482)
+++ ruby_1_8_7/lib/irb/ext/save-history.rb	(revision 24483)
@@ -50,23 +50,24 @@
   module HistorySavingAbility
     include Readline
 
-    def HistorySavingAbility.create_finalizer
-      proc do
-	if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0
-	  if hf = IRB.conf[:HISTORY_FILE]
-	    file = File.expand_path(hf)
-	  end
-	  file = IRB.rc_file("_history") unless file
-	  open(file, 'w' ) do |f|
-	    hist = HISTORY.to_a
-	    f.puts(hist[-num..-1] || hist)
-	  end
-	end
-      end
-    end
+#     def HistorySavingAbility.create_finalizer
+#       proc do
+# 	if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0
+# 	  if hf = IRB.conf[:HISTORY_FILE]
+# 	    file = File.expand_path(hf)
+# 	  end
+# 	  file = IRB.rc_file("_history") unless file
+# 	  open(file, 'w' ) do |f|
+# 	    hist = HISTORY.to_a
+# 	    f.puts(hist[-num..-1] || hist)
+# 	  end
+# 	end
+#       end
+#     end
 
     def HistorySavingAbility.extended(obj)
-      ObjectSpace.define_finalizer(obj, HistorySavingAbility.create_finalizer)
+#      ObjectSpace.define_finalizer(obj, HistorySavingAbility.create_finalizer)
+      IRB.conf[:AT_EXIT].push proc{obj.save_history}
       obj.load_history
       obj
     end
@@ -80,6 +81,19 @@
 	end
       end
     end
+
+    def save_history
+      if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0
+	if history_file = IRB.conf[:HISTORY_FILE]
+	  history_file = File.expand_path(history_file)
+	end
+	history_file = IRB.rc_file("_history") unless history_file
+	open(history_file, 'w' ) do |f|
+	  hist = HISTORY.to_a
+	  f.puts(hist[-num..-1] || hist)
+	end
+      end
+    end
   end
 end
 
Index: ruby_1_8_7/lib/irb/init.rb
===================================================================
--- ruby_1_8_7/lib/irb/init.rb	(revision 24482)
+++ ruby_1_8_7/lib/irb/init.rb	(revision 24483)
@@ -114,6 +114,8 @@
 #    @CONF[:LC_MESSAGES] = "en"
     @CONF[:LC_MESSAGES] = Locale.new
     
+    @CONF[:AT_EXIT] = []
+    
     @CONF[:DEBUG_LEVEL] = 1
   end
 
Index: ruby_1_8_7/lib/irb.rb
===================================================================
--- ruby_1_8_7/lib/irb.rb	(revision 24482)
+++ ruby_1_8_7/lib/irb.rb	(revision 24483)
@@ -65,13 +65,21 @@
     trap("SIGINT") do
       irb.signal_handle
     end
-    
-    catch(:IRB_EXIT) do
-      irb.eval_input
+
+    begin
+      catch(:IRB_EXIT) do
+	irb.eval_input
+      end
+    ensure
+      irb_at_exit
     end
 #    print "\n"
   end
 
+  def IRB.irb_at_exit
+    @CONF[:AT_EXIT].each{|hook| hook.call}
+  end
+
   def IRB.irb_exit(irb, ret)
     throw :IRB_EXIT, ret
   end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]