ruby-trunk-changes r35724 - r35754

今日は Shift JIS の文字列に対する String#tr などのメソッドの範囲指定の不具合修正、Test::Unit のメッセージ出力モードの指定の変更、Net::FTP の終了処理の変更などがありました。

naruse:r35724 2012-05-20 22:32:16 +0900

String#tr などの文字の一括置換のメソッドで Shift JIS の文字を置換しようとして範囲指定をすると、不正なコードポイントの部分まで文字として扱われてしまって、範囲が思ったものと異なる指定として扱われる不具合を修正しています。 [ruby-dev:45652] [Bug #6450]

nobu:r35725 2012-05-20 23:00:10 +0900

ruby.c のコメントの typo 修正。

nobu:r35726 2012-05-20 23:00:13 +0900

ext/extmk.rb で文字列の配列を Shellwords.escape して join していたのを Shellwords.join に置き換えるリファクタリング

nobu:r35727 2012-05-20 23:00:15 +0900

ext/extmk.rb で $stdout, $stderr を File::NULL を open して代入していたところを IO#reopen で file descriptor レベルで置き換えるようにしています。子プロセスにまで標準出力のリダイレクトを伝播させるためとのこと。

nobu:r35729 2012-05-21 00:58:00 +0900

Test::Unit によるテストで -n/--name オプションでテストケースを指定するのに正規表現('/.../' と / でくくる)を指定された時にそれをコンパイルした結果を options[:filter] に書き戻していたのをやめています。

svn:r35730 2012-05-21 00:58:03 +0900

version.h の日付更新。

nobu:r35731 2012-05-21 00:58:03 +0900

コンパイラの -framework= というオプションがエラーになってしまっていたので ext/extmk.rb でオプションと引数を"="で繋ぐ記法を使うのをやめて、ext/extmk.rb でオプションを分割するのに "-" ではじまるところを区切りにしてオプションと引数がひとまとまりなるように分割するようにしています。

naruse:r35732 2012-05-21 06:56:40 +0900

Net::FTP で接続を切る時にいきなり close するのではなく shutdown(2) で切断を通知してから応答を確認して(タイムアウトつき)それから close するようにしています。

naruse:r35733 2012-05-21 11:27:07 +0900

r35732 の変更で shutdown を呼ぶ時に例外は rescue して無視するようにしています。またテストでサーバ側の Thread の終了を待つように Thread#join の呼び出しを teardown に追加しています。

nobu:r35734 2012-05-21 12:11:28 +0900

make の依存関係にエンコーディング関係のオブジェクトの依存関係を追記しています。

shyouhei:r35735 2012-05-21 12:45:52 +0900

.travis.yml にビルド前に apt-get build-dep ruby1.9.1 で必要なライブラリをインストールしておくようにしています。 Travis-CI で tcl/tk がなくて拡張ライブラリ tcl のコンパイルがされていなかったそうです。

nobu:r35736 2012-05-21 16:05:50 +0900

Test::Unit でテスト結果を1行に納めて改行せずに更新するモードを -v/--verbose が指定されたら抑制するようにしています。

knu:r35737 2012-05-21 16:18:43 +0900

拡張ライブラリ syslog の Syslog.inspect で rb_class2name() でクラス名を取得する前に型が T_MODULE 型であることをチェックするようにしています。 この mSyslog_inspect() っていう関数は rb_define_module_function() に渡されてるので、private インスタンスメソッドと Syslog の特異メソッド(クラスメソッド)の両方が定義されているのに、これをみると self が Module であることを期待しているのでまずいんじゃないでしょうか。

knu:r35738 2012-05-21 16:18:47 +0900

Syslog.inspect で sprintf(3) で C の文字列を作ってから Ruby の文字列化していたところを rb_sprintf() を利用するようにリファクタリングしています。

knu:r35739 2012-05-21 16:18:49 +0900

Syslog の下に Syslog::Priority、Syslog::Level、Syslog::Option、Syslog::Macros といったサブモジュールを追加して Syslog::Constants に定義されていた syslog 用の定数はその下に分類されるようにしています。 Syslog::Constants にこれらのサブモジュールが include されるので元の変数名でも参照はできるようにしています。

nobu:r35748 2012-05-21 16:36:58 +0900

Test::Unit で job-status の指定がない時のデフォルトの挙動をセットするのは主力が端末でかつ -v/--verbose が指定されていない時だけにしています。はてそうすると options[:job_status] が nil になる場合があるのでは……と思ったらここが nil なら job_status の処理がスキップされるという挙動になるので未指定という挙動は別にあるみたいです。なんとなくただの予防線のような気もしますけど。

naruse:r35749 2012-05-21 17:48:32 +0900

Net::FTP のテストでソケットにデータを書き込むところで Errno::EPIPE の発生を期待している assertion があったのですが、例外が発生しないこともあり、また ECONNRESET, ECONNABORTED, EOFError などの他の例外が発生することもあるので、assert_raise は消して rescue で例外を補足して無視するように変更しています。

naruse:r35750 2012-05-21 21:56:17 +0900

Net::FTP#retrbinary で close を ensure 節に移動したので close を呼ぶ変数 conn が nil でないかチェックを追加しています。 また Net::FTP#retrlines でも同様に close を ensure 節にして例外発生時に閉じ忘れがないようにしています。

naruse:r35752 2012-05-21 23:03:18 +0900

openssl の TLS v1.2 のテストは OpenSSL 1.0.1 pre-beta では TLS v1.2 の機能がデフォルトで切られているので OpenSSL のバージョンを見て 0x10001000 よりも後のときだけテストするようにしています。

mame:r35753 2012-05-22 00:47:03 +0900

Struct#members というメソッドでメンバー名のシンボルの配列を返すのに新しい Array オブジェクトを作って1つずつ push してコピーを作っていたのを rb_ary_dup() で一括でコピーするようにしています。 [ruby-dev:45451] [Feature #6218]
どうも元は String の配列を返していたので変換のためにループを回していたのがその変換が不要になった時に無意味になっていたようです。

svn:r35754 2012-05-22 00:47:08 +0900

version.h の日付更新。