Project

General

Profile

Actions

Bug #1556

closed

irb does not save history from 1.8.7-p83 and later

Added by no6v (Nobuhiro IMAI) almost 15 years ago. Updated almost 13 years ago.

Status:
Closed
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

Actions #1

Updated by keiju (Keiju Ishitsuka) almost 15 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: <<---

=end

Actions #2

Updated by matz (Yukihiro Matsumoto) almost 15 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, (石塚圭樹) writes:

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

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

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

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

=end

Actions #3

Updated by no6v (Nobuhiro IMAI) almost 15 years ago

=begin
いまいです。

From: Yukihiro Matsumoto <matz_at_ruby-lang.org>
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
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

Actions #4

Updated by keiju (Keiju Ishitsuka) over 14 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: <<---

=end

Actions #5

Updated by matz (Yukihiro Matsumoto) over 14 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) writes:

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

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

=end

Actions #6

Updated by keiju (Keiju Ishitsuka) over 14 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: <<---

=end

Actions #7

Updated by matz (Yukihiro Matsumoto) over 14 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, (石塚圭樹) writes:

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

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

=end

Actions #8

Updated by no6v (Nobuhiro IMAI) over 14 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
Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106

=end

Actions #9

Updated by keiju (Keiju Ishitsuka) over 14 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: <<---

=end

Actions #10

Updated by shyouhei (Shyouhei Urabe) over 13 years ago

  • Status changed from Open to Closed

=begin
Fixed in 1.8.7-p196.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0