ruby-trunk-changes r61163 - r61211

今日もたくさんのコミットがありました。 Thread が rescue されない例外で終了した時にバックトレースなどを表示するようにする Thread.report_on_exception がデフォルトで true になる変更などがありました。

sorah: r61163 2017-12-12 22:07:06 +0900

NEWS ファイルの体裁や説明の修正。

svn: r61164 2017-12-12 22:07:08 +0900

r61163 の行末の空白除去。

yui-knk: r61165 2017-12-12 22:19:40 +0900

拡張ライブラリ coverage の method coverage で define_method で定義したメソッドの coverage についてのテストを追加しています。

k0kubun: r61166 2017-12-12 22:47:46 +0900

r61166 の Struct.new の :keyword_init オプション引数追加時のテストの定数名を変更しています。

k0kubun: r61167 2017-12-12 22:56:48 +0900

r61149 の irb の修正により IRB.setup で $0 が変更されないことを確認するテストを追加しています。

yui-knk: r61168 2017-12-12 23:10:23 +0900

do ... end のブロックの parse 時に end のノードに位置情報を設定しておくようにしています。

hsbt: r61169 2017-12-12 23:10:43 +0900

r61145 の Unicode のデータファイルダウンロードに使う URL を http から https にした変更を revert しています。 mswin の CI の環境で証明書に問題があってダウンロードできないそうです。

yui-knk: r61170 2017-12-12 23:21:20 +0900

r61170 と同じように { ... } のブロックの parse 時に "}" のノードに位置情報を設定しておくようにしています。

yui-knk: r61171 2017-12-12 23:47:34 +0900

ちょっと差分がどう効くのかはよくわからなかったのですが、メソッドチェインした呼び出しの NODE_CALL の位置情報を変更しているようです。

kazu: r61172 2017-12-13 00:01:02 +0900

r61143 で追加した Process.last_status の rdoc 用コメントに nil が戻る可能性があることを追記しています。

svn: r61173 2017-12-13 00:01:03 +0900

version.h の日付更新。

kazu: r61174 2017-12-13 00:01:04 +0900

標準添付ライブラリ cgiデバッグメッセージ出力に puts と sprintf を使っていたところを IO#printf を利用するようにリファクタリングしています。

kazu: r61175 2017-12-13 00:01:07 +0900

irb の初期化時もロード失敗の警告メッセージに余計なコロンが含まれていたのを削っています。

kazu: r61176 2017-12-13 00:01:08 +0900

NEWS ファイルの File::Stat#atime, #mtime, #ctime がクラスメソッドの記法で記述されていたので修正しています。

kazu: r61177 2017-12-13 00:01:10 +0900

NEWS ファイルの typo 修正。

kazu: r61178 2017-12-13 00:01:11 +0900

NEWS ファイルの Integer#pow や Enumerable#all?, #any?, #none?, #one? などのメソッドに追加された引数の記述がキーワード引数のようにコロンつきになってたのでコロンを削っています。

kazu: r61179 2017-12-13 00:01:13 +0900

Enumerable#one? の rdoc 用コメントに、空の配列の場合 false を返すサンプルを追記しています。

usa: r61180 2017-12-13 00:02:51 +0900

Windows 環境でFile.lstat で symbolic link (Windows の場合は Reparse Point という機構で実現されてたりする)の場合もサポートするように実装を追加しています。 [ruby-core:84209] [Feature #14169]

k0kubun: r61181 2017-12-13 00:03:45 +0900

Struct.new で生成したクラスの #inspect メソッドで r61137 で導入した keyword_init: true で名前による初期化を行うようになっていた時にはそのキーを表示するようにしています。 https://github.com/ruby/ruby/pull/1773

k0kubun: r61182 2017-12-13 00:12:05 +0900

Struct.new の rdoc 用コメントの言い回しの修正とスタイルの修正。

eregon: r61183 2017-12-13 03:43:42 +0900

Thread.report_on_exception をデフォルトで true にする変更を行なっています。おー 2.5 直前にこれ入れるのか。 [ruby-core:83979] [Feature #14143]

eregon: r61184 2017-12-13 03:43:55 +0900

drb のテストで main_loop の終了時に stop_service を呼ぶ Thread を新たに立てるのをやめて、stop_service から切り出した shutdown メソッドを直接呼ぶようにしています。停止時にリソース不足で Thread が起動できないことがあったのが Thread.report_on_exception = true でわかったみたいです。たまに thread leak してたっていうのこれかな。 [ruby-core:84213] [Bug #14171]

eregon: r61185 2017-12-13 03:44:07 +0900

標準添付ライブラリ rinda のテストで Thread#raise で割り込みをかけているのが Thread.report_on_exception = true でメッセージが出てしまうので、rescue 節を追加しています。 [ruby-core:83979] [Feature #14143]

eregon: r61186 2017-12-13 03:44:21 +0900

他にも IO#close の Thread 間の挙動のテストや拡張ライブラリ digest のテストでも Thread.report_on_exception = true の影響でメッセージが出ていたので、rescue したり対象の Thread で Thread#report_on_exception = false に設定して実行するようにしたりしています。 [ruby-core:83979] [Feature #14143]

eregon: r61187 2017-12-13 03:44:33 +0900

rinda のテストで例外が発生するため(assert_raise で例外が発生することをチェックしているブロック内で)不要な assert_nil の呼び出しがあったので削っています。

eregon: r61188 2017-12-13 03:44:49 +0900

他にも make test-all で Thread.report_on_exception = true の影響でメッセージが出ているところを assert_raise で明示的にチェックするようにしたり、Thread#report_on_exception = false を使うようにしたりして対応しています。 [ruby-core:83979] [Feature #14143]

eregon: r61189 2017-12-13 04:48:32 +0900

追加で Bignum のテストでも Thread.report_on_exception = true 対策で rescue を追加しています。

eregon: r61190 2017-12-13 05:09:36 +0900

Thread.handle_interrupt のテストで Thread#join の戻り値をチェックしていた assertion があったのを削っています。昔は join(0.2) のようにタイムアウトが渡されていたので nil がかえる可能性があったみたいですが今は引数なしになったのでチェックの必要がなくなったということみたいです。

eregon: r61191 2017-12-13 06:32:13 +0900

test/lib/leakchecker.rb にテストケース前後で Encoding.default_internal と Encoding.default_external が変化していないかのチェックを追加しています。

eregon: r61192 2017-12-13 06:51:53 +0900

test/lib/test/unit/assertions.rb の assert_raise_with_message で EnvUtil.with_default_internal を使って Encoding.default_interrnal を変更してブロック呼び出しするようにしていたのをやめています。この方法は複数の Thread で呼ばれるとちゃんと復旧できないので問題があったようです。

eregon: r61193 2017-12-13 07:37:40 +0900

r61192 の変更で EnvUtil.assert_raise_with_message の中で EnvUtil.with_default_external を使わなくしたので、一部呼び元で EnvUtil.with_default_external を付けるようにしています。

eregon: r61194 2017-12-13 08:41:34 +0900

r61192 と r61193 のテスト用ライブラリの変更を revert しています。もうちょっと別の方法で修正するため一旦 revert ということらしいです。

eregon: r61195 2017-12-13 08:41:50 +0900

r61192 と r61193 の対応を別の方法でやりなおし。 EnvUtil の特異メソッドとして EnvUtil.capture_global_values を追加して、全体の最初で $VERBOSE と Encoding.default_internal と Encoding.default_external の元の値を保存しておいて、復旧はこれを使うようにしています。これで EnvUtil.assert_raise_with_message で race condition を気にせず EnvUtil.with_default_external を使えるようにしています。

yui-knk: r61196 2017-12-13 08:48:50 +0900

空っぽのスクリプトを parse した時の NODE_BEGIN の範囲情報のカラムが 2つめのカラムになってたのを修正しています。

normal: r61197 2017-12-13 09:38:08 +0900

標準添付ライブラリ webrickWEBrick::HTTPServer に複数の Servlet を登録している時の Servlet の決定に使う正規表現で ^$ を使っていたのを \A \z を利用するように修正しています。URL のパスに % エンコーディングで改行を入れると間違ったマッチをする可能性があったようです。

yui-knk: r61198 2017-12-13 10:10:27 +0900

r61196 の NODE_BEGIN の範囲情報の変更を revert しています。 この場合の @0 の位置情報はセットされてなくて参照してはまずかったみたいです。

hsbt: r61199 2017-12-13 11:43:38 +0900

README.md に書かれてた GitHubリポジトリの clone 時の URL が git:// の scheme だったので https:// に修正しています。 https://github.com/ruby/ruby/pull/1772

hsbt: r61200 2017-12-13 14:24:01 +0900

標準添付ライブラリ csv の default gem としての gemspec ファイルのバージョンを 1.0.0 に更新しています。

hsbt: r61201 2017-12-13 14:52:47 +0900

拡張ライブラリ etc の default gem としての gemspec ファイルのバージョンを 1.0.0 に更新しています。

naruse: r61202 2017-12-13 17:38:43 +0900

r61054 の tool/vcs.rb のコマンドがみつからなかった時の処理の変更を revert しています。どうも snapshot の作成がエラーになってたみたいです。

eregon: r61203 2017-12-13 18:45:48 +0900

Thread.report_on_exception = true のデフォルト化の対応の続きで、シグナルハンドラと Thread#raise に Interrupt が渡された時の組み合わせのテストで、子プロセスで Thread.report_on_exception = false を使ってメッセージを抑制するようにしています。

nobu: r61204 2017-12-13 19:16:05 +0900

process.c のインデントの修正のみ。

nobu: r61205 2017-12-13 19:26:09 +0900

拡張ライブラリ ripper の Ripper::Lexter::State に allbits?, anybits?, nobits? メソッドを追加しています。 r61147 で追加した Integer の同名のメソッドを使っています。うーん確かこのクラスというか Struct は inspect での文字列化の時のためのなにかだったと思うのですが、Integer のように挙動するなにかだから Integer と同じメソッドを持つようにしているってことかな。それだと他にもいろいろ足りないような気はするけど | や & も定義してあるから、ビット演算はする可能性があるということかな。 [ruby-core:84211] [Feature #14170]

nobu: r61206 2017-12-13 19:40:54 +0900

r61094 の Process.maxgroups のテストが Process.groups が空配列を返した時にエラーになってたので、その場合はとりあえず [0] にしておくようにしています。 [ruby-core:84224] [Bug #14174]

nobu: r61207 2017-12-13 19:43:21 +0900

Env.fetch のテストで第2引数とブロック両方渡した時の警告を抑制するため EnvUtil.suppress_warning を使うようにしています。

sorah: r61208 2017-12-13 19:55:41 +0900

r61177 で修正されてた NEWS ファイルの Integer#step の記述の typo ですが、これは typo じゃなくて過去形だったみたいなので戻しています。

eregon: r61209 2017-12-13 20:13:55 +0900

Travis CI で world writable dir の警告が大量に出るそうで、その対策で .travis.yml に group: deprecated-2017Q4 というのを追加して利用する VM イメージを変更しているようです。 https://blog.travis-ci.com/2017-12-12-new-trusty-images-q4-launch

eregon: r61210 2017-12-13 20:22:55 +0900

r61209 の続きで .travis.yml の sudo: false を sudo: required にする変更も行なっています。

nobu: r61211 2017-12-13 21:06:11 +0900

r61202 で revert された r61054 の動機であった VCS#get_revisions でのコマンドがみつからなくて Errno::ENOENT が発生した時に VCS::NotFoundError を発生させるようにする変更だけ入れています。