今日は 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: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 レベルで置き換えるようにしています。子プロセスにまで標準出力のリダイレクトを伝播させるためとのこと。
nagachika:r35728 2012-05-20 23:18:04 +0900
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=
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 の日付更新。