Project

General

Profile

Bug #1556

irb does not save history from 1.8.7-p83 and later

Added by no6v (Nobuhiro IMAI) over 10 years ago. Updated over 8 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
ruby -v:
ruby 1.8.7 (2009-01-12 patchlevel 83) [i686-linux]
[ruby-dev:38563]

Description

=begin
1.8.7-p83 以降(p167 でも)、irb がヒストリを保存してくれないようです。
ファイナライザが呼ばれる条件とタイミングが変わった影響でしょうか?
チケットを探しきれなかったのですが、既出だったらごめんなさい。

$ rm -f ~/.irb_history
$ irb -f
irb(main):001:0> require "irb/ext/save-history"
=> true
irb(main):002:0> context.save_history = 3
=> 3
irb(main):003:0> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2009-01-12 patchlevel 83) [i686-linux]"
irb(main):004:0> p 83
83
=> nil
irb(main):005:0> exit
$ cat ~/.irb_history
cat: /home/nov/.irb_history: No such file or directory

p82 だと保存されます。

$ rm -f ~/.irb_history
$ irb -f
irb(main):001:0> require "irb/ext/save-history"
=> true
irb(main):002:0> context.save_history = 3
=> 3
irb(main):003:0> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2009-01-11 patchlevel 82) [i686-linux]"
irb(main):004:0> p 82
82
=> nil
irb(main):005:0> exit
$ cat ~/.irb_history
RUBY_DESCRIPTION
p 82
exit
=end

History

#1

Updated by keiju (Keiju Ishitsuka) over 10 years ago

=begin
けいじゅ@いしつかです.

ruby-1.8.7 系のバグのような気がします. ファイナライザーが呼び出されな
いような?

下記のプログラムで,


obj = Object.new

def fin
proc{p 1}
end

ObjectSpace.define_finalizer(obj, fin)

#obj = nil
--

1.8.7最新版のみファイナライザが実行されません. 他の, 1.8.8, 1.9系は呼
ばれます. ちなみに obj = nil を入れると呼び出されるので, その辺りの問
題では?

In [ruby-dev:38563] the message: "[ruby-dev:38563] [Bug #1556] irb
does not save history from 1.8.7-p83 and later", on Jun/02 21:47(JST)
Nobuhiro IMAI writes:

Bug #1556: irb does not save history from 1.8.7-p83 and later
http://redmine.ruby-lang.org/issues/show/1556

起票者: Nobuhiro IMAI
ステータス: Open, 優先度: Normal
ruby -v: ruby 1.8.7 (2009-01-12 patchlevel 83) [i686-linux]

1.8.7-p83 以降(p167 でも)、irb がヒストリを保存してくれないようです。
ファイナライザが呼ばれる条件とタイミングが変わった影響でしょうか?
チケットを探しきれなかったのですが、既出だったらごめんなさい。

$ rm -f ~/.irb_history
$ irb -f
irb(main):001:0> require "irb/ext/save-history"
=> true
irb(main):002:0> context.save_history = 3
=> 3
irb(main):003:0> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2009-01-12 patchlevel 83) [i686-linux]"
irb(main):004:0> p 83
83
=> nil
irb(main):005:0> exit
$ cat ~/.irb_history
cat: /home/nov/.irb_history: No such file or directory

p82 だと保存されます。

$ rm -f ~/.irb_history
$ irb -f
irb(main):001:0> require "irb/ext/save-history"
=> true
irb(main):002:0> context.save_history = 3
=> 3
irb(main):003:0> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2009-01-11 patchlevel 82) [i686-linux]"
irb(main):004:0> p 82
82
=> nil
irb(main):005:0> exit
$ cat ~/.irb_history
RUBY_DESCRIPTION
p 82
exit


http://redmine.ruby-lang.org

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

=end

#2

Updated by matz (Yukihiro Matsumoto) over 10 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:38566] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later"
on Thu, 4 Jun 2009 17:47:50 +0900, keiju@ishitsuka.com (石塚圭樹) writes:

|ruby-1.8.7 系のバグのような気がします. ファイナライザーが呼び出されな
|いような?

|1.8.7最新版のみファイナライザが実行されません. 他の, 1.8.8, 1.9系は呼
|ばれます. ちなみに obj = nil を入れると呼び出されるので, その辺りの問
|題では?

なるほど。調べてみます。

ただ、プロセス終了時におけるファイナライザの信頼できる実行は
なかなか難しいので、将来的にはhistoryのセーブのような重要なタ
スクはファイナライザからではなく、at_exitのようなフックで実現
していただけると助かります。

=end

#3

Updated by no6v (Nobuhiro IMAI) over 10 years ago

=begin
いまいです。

From: Yukihiro Matsumoto
Date: Thu, 4 Jun 2009 18:21:02 +0900

|ruby-1.8.7 系のバグのような気がします. ファイナライザーが呼び出されな
|いような?

|1.8.7最新版のみファイナライザが実行されません. 他の, 1.8.8, 1.9系は呼
|ばれます. ちなみに obj = nil を入れると呼び出されるので, その辺りの問
|題では?

なるほど。調べてみます。

ただ、プロセス終了時におけるファイナライザの信頼できる実行は
なかなか難しいので、将来的にはhistoryのセーブのような重要なタ
スクはファイナライザからではなく、at_exitのようなフックで実現
していただけると助かります。

irb のプロセスの寿命と、obj(IRB::Context の @io)の寿命とが同じぐらいな
のであれば、単純に at_exit を使うようにするだけでいいでしょうか。今の
ところ、手元では問題なく動いています。とりあえず ruby_1_8{,_[67]} ブラ
ンチにはそのままあたると思います。
--
Nobuhiro IMAI nov@yo.rim.or.jp
Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106

Index: lib/irb/ext/save-history.rb
===================================================================
--- lib/irb/ext/save-history.rb (revision 23644)
+++ lib/irb/ext/save-history.rb (working copy)
@@ -51,7 +51,7 @@
include Readline

  def HistorySavingAbility.create_finalizer
  • proc do
  •  at_exit do
    

    if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0
    if hf = IRB.conf[:HISTORY_FILE]
    file = File.expand_path(hf)
    @@ -66,7 +66,7 @@
    end

    def HistorySavingAbility.extended(obj)

  •  ObjectSpace.define_finalizer(obj, HistorySavingAbility.create_finalizer)
    
  •  HistorySavingAbility.create_finalizer
    obj.load_history
    obj
    

    end

=end

#4

Updated by keiju (Keiju Ishitsuka) about 10 years ago

=begin
けいじゅ@いしつかです.

今日つつかれたのをもう一件.

In [ruby-dev:38580] the message: "[ruby-dev:38580] Re: [Bug #1556] irb
does not save history from 1.8.7-p83 and later", on Jun/08 09:18(JST)
Nobuhiro IMAI writes:

いまいです。

|ruby-1.8.7 系のバグのような気がします. ファイナライザーが呼び出されな
|いような?

|1.8.7最新版のみファイナライザが実行されません. 他の, 1.8.8, 1.9系は呼
|ばれます. ちなみに obj = nil を入れると呼び出されるので, その辺りの問
|題では?

なるほど。調べてみます。

まつもとさん, この件どうなりました?
1.8.7系のファイナライザのバグだと思っているのですが?

それとは別に:

ただ、プロセス終了時におけるファイナライザの信頼できる実行は
なかなか難しいので、将来的にはhistoryのセーブのような重要なタ
スクはファイナライザからではなく、at_exitのようなフックで実現
していただけると助かります。

irb のプロセスの寿命と、obj(IRB::Context の @io)の寿命とが同じぐらいな
のであれば、単純に at_exit を使うようにするだけでいいでしょうか。今の
ところ、手元では問題なく動いています。とりあえず ruby_1_8{,_[67]} ブラ
ンチにはそのままあたると思います。

これはこれでその通りだと思いますので, 採用したいと思います.

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

=end

#5

Updated by matz (Yukihiro Matsumoto) about 10 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:38818] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later"
on Sat, 18 Jul 2009 01:08:03 +0900, keiju@ishitsuka.com (keiju ISHITSUKA) writes:

|>> なるほど。調べてみます。
|
|まつもとさん, この件どうなりました?
|1.8.7系のファイナライザのバグだと思っているのですが?

ファイナライザのバグなのは確かです。ただし、ファイナライザを
必ず呼ぶのはかなり困難なので、at_exitでの対応をお願いしたい
ところです。よろしく。

=end

#6

Updated by keiju (Keiju Ishitsuka) about 10 years ago

=begin
けいじゅ@いしつかです.

In [ruby-dev:38819] the message: "[ruby-dev:38819] Re: [Bug #1556] irb
does not save history from 1.8.7-p83 and later", on Jul/18 01:43(JST)
Yukihiro Matsumoto writes:

まつもと ゆきひろです

ファイナライザのバグなのは確かです。ただし、ファイナライザを
必ず呼ぶのはかなり困難なので、at_exitでの対応をお願いしたい
ところです。よろしく。

at_exitだと, 組み込まれているときに対応できないので, irbから抜けたとき
に実行するようにしました.

それで, trunkの方には反映しましたが, 1.8.7への反映はどうすればよいんで
しょう? 何か手続きとかあります?

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

=end

#7

Updated by matz (Yukihiro Matsumoto) about 10 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:38839] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later"
on Wed, 22 Jul 2009 00:42:09 +0900, keiju@ishitsuka.com (石塚圭樹) writes:

|それで, trunkの方には反映しましたが, 1.8.7への反映はどうすればよいんで
|しょう? 何か手続きとかあります?

1.8 HEADに突っ込んでください。各ブランチのメンテナがバックポー
トするでしょう。

=end

#8

Updated by no6v (Nobuhiro IMAI) about 10 years ago

=begin
いまいです。

From: keiju_at_ishitsuka.com (石塚圭樹)
Date: Wed, 22 Jul 2009 00:42:09 +0900

at_exitだと, 組み込まれているときに対応できないので, irbから抜けたとき
に実行するようにしました.

lib/irb.rb が更新されていないようです。

$ svn log -v -r24229


r24229 | keiju | 2009-07-22 00:39:51 +0900 (Wed, 22 Jul 2009) | 4 lines
Changed paths:
M /trunk/ChangeLog
M /trunk/lib/irb/ext/save-history.rb
M /trunk/lib/irb/init.rb

  • 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]

$ svn log -l1 lib/irb.rb


r23985 | keiju | 2009-07-07 20:36:20 +0900 (Tue, 07 Jul 2009) | 3 lines

  • bin/irb, lib/irb.rb lib/irb/*: irb-0.9.6, extend inspect-mode

--
Nobuhiro IMAI nov@yo.rim.or.jp
Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106

=end

#9

Updated by keiju (Keiju Ishitsuka) about 10 years ago

=begin
けいじゅ@いしつかです.

In [ruby-dev:38841] the message: "[ruby-dev:38841] Re: [Bug #1556] irb
does not save history from 1.8.7-p83 and later", on Jul/22 01:49(JST)
Nobuhiro IMAI writes:

いまいです。

at_exitだと, 組み込まれているときに対応できないので, irbから抜けたとき
に実行するようにしました.

lib/irb.rb が更新されていないようです。

申し訳ない. 追加しました.

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

=end

#10

Updated by shyouhei (Shyouhei Urabe) almost 9 years ago

  • Status changed from Open to Closed

=begin
Fixed in 1.8.7-p196.
=end

Also available in: Atom PDF