ruby-trunk-changes 2019-04-29

昨日は体調不良でお休みしたので今日は 2日ぶんまとめて更新します。 Integer#[] の引数に2つの整数や Range を受け取れるようにする機能追加、ヒアドキュメントのクオートされたマーカーに改行を含む記法を SyntaxError とする変更のほか安定版メンテナンスやリリース関連のツールの git 対応、rubyspec の更新などがありました。

[3f9562015e] Nobuyoshi Nakada 2019-04-27 21:26:42 +0900

String のバッファ共有をする時に既に shared になっている String から共有する時は、その共有元のほうと共有するようにしています。孫共有してしまうとこっそり文字列バッファが壊れてしまうことがあったようです。 [ruby-core:92412] [Bug #15792]

[9348643575] Takashi Kokubun 2019-04-27 22:01:11 +0900

irb を再び upstream から更新しています。色付け対象の拡張やテストの修正など。

[3067370f61] Takashi Kokubun 2019-04-27 22:21:36 +0900

tool/downloader.rb でダウンロードをリトライする回数を増やしています。

[af1e487e9b] Nobuyoshi Nakada 2019-04-27 23:06:39 +0900

doc/ChangeLog-2016 や doc/ChangeLog-2017 といったファイルをいじってるんですが。こんなファイルあったっけ? doc/ChangeLog-2.5.0 みたいにバージョン番号ごとだったような気がするんですが…。

[6f8ac2cb28] Nobuyoshi Nakada 2019-04-27 23:08:50 +0900

tool/vcs.rb でコミットログから ChangeLog ファイルを生成する時に最初のコミットをもうひとつ前まで辿るようにしています。さっきの変更の関連かな。

[7875c42f64] Nobuyoshi Nakada 2019-04-27 23:13:03 +0900

tool/vcs.r で ChangeLog 生成のための git log のフォーマットを --format=medium に指定するようにしています。

[2a4625115a] Nobuyoshi Nakada 2019-04-27 23:14:59 +0900

tool/vcs.rb の GIT 版の ChangeLog 生成でログの整形をしていたのを git のログをそのまま利用するようにしています。
あとrevisionの指定があった時は以前のgit-svnのログを利用して対象のコミットを特定してて、そうか2.7では混在するから範囲の指定が大変そうですね。どうするんだろ。

[db614dbf6d] Nobuyoshi Nakada 2019-04-27 23:25:48 +0900

tool/make-snapshot で過去の ChangeLog ファイルから今回生成する最初の revision を特定するところで git の commit hash 形式に対応するようにしています。

[429fdf3de2] Nobuyoshi Nakada 2019-04-27 23:27:12 +0900

doc/ChangeLog-2018 を追加しています。思い出した anchor のために ChangeLog が必要なんでしたね。2017 がなくても大丈夫だったのはなんでだろ、というかもしかしたら2.5のパッケージのChangeLogは2年ぶん入っていたのか…(調べてみたら確かにそうだった)。

[87d2a2df1b] Benoit Daloze 2019-04-27 16:43:28 +0200

Array.try_convert の rdoc 用コメントの修正。

[bb6036946e] Nobuyoshi Nakada 2019-04-28 00:30:16 +0900

doc/ChangeLog-201{678} は削除して、tool/make-snapshot で ChangeLog の始点になるコミットを特定するために matz による version.h へのコミットを利用するようにしています。こんなところに matz 依存が。毎年すぐにコミットしてもらわないといけませんね。

[80be9e986b] git 2019-04-28 01:25:10 +0900

version.h の日付更新。

[00c33d9c23] Benoit Daloze 2019-04-27 18:53:20 +0200

ruby/mspec を upstream からマージしています。

[a1b4816759] Benoit Daloze 2019-04-27 18:53:23 +0200

ruby/spec も upstream からマージしています。

[cae0b73214] Takashi Kokubun 2019-04-28 02:01:04 +0900

default gem の irb を再度 upstream から同期しています。Module の色付け対応追加。

[ed4f331879] git 2019-04-28 02:02:30 +0900

cae0b73214d721539e335babf02283799198a983 の行末の空白除去。

[14f004d396] Takashi Kokubun 2019-04-28 02:18:17 +0900

AppVeyor の mswin 版のビルドでも GC.compact のテストは分離して実行するようにしています。

[5b93321064] Benoit Daloze 2019-04-27 19:23:45 +0200

ruby/spec の再度更新。 File.expand_path でホームディレクトリを補完するテストを Etc.getlogin が取得できる時だけ実行するようにしています。

[0d227d1ce6] Benoit Daloze 2019-04-27 19:42:54 +0200

5b93321064e83ea180492469071189372e8289e8 の再修正。環境変数 USER をクリアした状態で Etc.getloging がとれるかどうかチェックするようにしています。

[b7c301569d] Benoit Daloze 2019-04-27 23:42:31 +0200

rubyspec の Process.clock_getres のテストの一部を BSD で skip するようにしています。

[2c283655a6] Benoit Daloze 2019-04-27 23:46:08 +0200

同じく rubyspec の Process.clock_getres のテストの一部を solaris で skip するようにしています。

[7790b610b8] Nobuyoshi Nakada 2019-04-28 09:56:56 +0900

tool/make-snapshot の tag に使う revision の頭に r を付けるのを抑制するようにしています。nightly snapshot 作成時かな。

[d47cd75b4f] Nobuyoshi Nakada 2019-04-28 10:41:32 +0900

7790b610b8c11ae987e0f9a936418a7a34a8af0b のブランチ名取得時のコマンド結果を chomp するようにしています。

[a15f7dd1fb] Jeremy Evans 2019-04-28 10:47:51 +0900

File.realpath が返す文字列は引数の tainted フラグに関わらず常に taint して返すようにしています。対象が symbolic link の場合引数に渡してない文字列が含まれる可能性があるので、ファイルシステム上のファイルが信頼できない場合 tainted になるべき、ということみたいです。うーんなるほど。 [ruby-core:92443] [Bug #15803]

[d0a5467320] David Rodríguez 2019-04-28 11:07:45 +0900

RubyGems を upstream からマージしています。 Pull Request からのマージですね。 https://github.com/ruby/ruby/pull/2154

[5a53682d6d] Nobuyoshi Nakada 2019-04-28 11:36:03 +0900

tool/vcs.rb の GIT 版で ChangeLog 生成のために matz の version.h のコミットを探す時に svn log に --reverse がついてたのを消しています。

[fdcd640507] Nobuyoshi Nakada 2019-04-28 11:36:03 +0900

Makefile.in や defs/gmake.mk など Makefile 系のファイルに emacs の mode line を追加しています。

[b766970527] Nobuyoshi Nakada 2019-04-28 12:04:15 +0900

ChangeLog 生成のために matz の version.h のコミットを探す時のコミットログの grep をもうちょっと正確に絞るようにしています。そこまでしなくても version.h を matz が変更するのは bump version する時しかないような気もしますが。

[d72bd190a8] Nobuyoshi Nakada 2019-04-28 12:11:59 +0900

tool/vcs.rb の SVN にも ChangeLog 生成のために matz のコミットを探す処理を追加しています。

[4c8f107898] Nobuyoshi Nakada 2019-04-28 13:46:16 +0900

tool/make-snapshot で ChangeLog 生成のために最初のコミットを探すのは省略時のデフォルトの挙動として tool/vcs.rb のほうに移動させて、引数として明示的に指定することも可能にしています。

[766293fc49] Takashi Kokubun 2019-04-28 14:04:48 +0900

.travis.yml の rubyspec を実行するテストで 2.4.6 を利用するように更新。2.3 が EOL になったため。

[f40458e9dd] Takashi Kokubun 2019-04-28 14:10:09 +0900

.travis.yml のコマンドラインオプションで -DVM_CHECK_MODE が値の指定なしで渡されてたので 1 に定義するようにしています。

[5d24fba544] Benoit Daloze 2019-04-28 12:37:29 +0200

b7c301569df2eaee3a2785e5ec56f8c53fbc9fea で rubyspec の Process.clock_getres のテストの一部を bsd で skip するようにしていましたが、そのテストケース全体を FreeBSD の時だけ skip するようにしています。

[4d8ad48f7d] Takashi Kokubun 2019-04-28 20:17:20 +0900

tool/redmine-backporter.rb のサブコマンド done でローカルの working copy が svn の時は revision 番号で、git の時は commit hash でメッセージを作るようにしています。

[588f212c26] Takashi Kokubun 2019-04-28 20:18:45 +0900

irb の upstream との同期。 色付けをさらに拡張しているようです。

[8711f77a26] Takashi Kokubun 2019-04-28 20:34:11 +0900

irb の upstream への同期。テストの修正のみ。

[d835ed4df1] Takashi Kokubun 2019-04-28 21:08:58 +0900

tool/merger.rb のコードを Merger モジュール内のメソッド定義にするようにリファクタリング

[fc37a045a0] Benoit Daloze 2019-04-28 14:35:17 +0200

rubyspec のコメントのtypo修正。

[16695af0ef] Benoit Daloze 2019-04-28 14:36:03 +0200

rubyspec の Process の CLOCK_XXX の定数を抽出する helper のちょっとしたリファクタリング

[fcb1875513] Takashi Kokubun 2019-04-28 21:41:02 +0900

tool/merger.rb の version メソッドを private にしています。

[14965c5f4b] Takashi Kokubun 2019-04-28 21:41:02 +0900

tool/merger.rb の backport 元にするブランチを決めるメソッドが svn リポジトリを前提としていたので削除して呼び元に展開しています。

[13abf5519a] Benoit Daloze 2019-04-28 14:44:12 +0200

rubyspec の Process.clock_getres で CentOS で CLOCK_MONOTONIC_RAW に対して負の精度を返すことがあるそうで、skip するようにしています。

[f2d7ba6a74] Takashi Kokubun 2019-04-28 21:51:37 +0900

irb の upstream への同期。また色付けの拡張をしています。

[cb8eb37377] Takashi Kokubun 2019-04-28 21:53:58 +0900

tool/merger.rb のコメントの必要なツールに git を追記。

[9a0dbb3414] Benoit Daloze 2019-04-28 14:55:30 +0200

rubyspec の Process.clock_getres のテストで ARM のプラットフォームでも失敗するようなので、これらのアーキテクチャで CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID, CLOCK_MONOTONIC_RAW などの定数はテスト対象から外すようにしています。

[a27f7e499c] Benoit Daloze 2019-04-28 14:55:30 +0200

9a0dbb341442fc0d203a5cd6fb46250e429e9188 の変更で移動した CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE の除外がプラットフォームによる guard が外れてて常に除外されるようになっていたので Linux の時のみ除外するようにしています。しかし元は windows または solaris 以外の時、という条件だったのでちょっと変わってるような。

[9426da83c6] Benoit Daloze 2019-04-28 14:59:14 +0200

rubyspec の Process.clock_getres のテストで AIX 向けの guard 追加しています。

[1c8cefca31] Takashi Kokubun 2019-04-28 22:02:34 +0900

tool/merger.rb でリポジトリの URL を格納してたグローバル変数を定数に変更しています。

[392d84b490] Takashi Kokubun 2019-04-28 22:15:01 +0900

tool/merger.rb で merge 時のオプションを -r から -c に修正しています。

[d906dd87b0] Benoit Daloze 2019-04-28 15:25:09 +0200

rubyspec の Process.clock_getres のテストで macOS の時にさらに CLOCK_UPTIME_RAW_APPROX を除外するようにしています。

[3bc810334c] Takashi Kokubun 2019-04-28 22:53:21 +0900

tool/merger.rb を安定版ブランチが svn、git どちらでも動くように対応しています。ruby 2.7 以降で必要になる機能ですね。

[cb55024613] Yusuke Endoh 2019-04-28 23:23:00 +0900

Integer#[] のテストを追加しています。唐突に思えるけど次の変更のついでに基本的なテストを追加しておいたってことですかね。

[6bedbf4625] Yusuke Endoh 2019-04-28 23:40:57 +0900

Integer#[] の引数に 2つの整数や Range オブジェクトを受け取ることで、連続した bit 列を抽出した整数を取り出せるようにしています。うーむこれは革命的だ。しかしチケットはすごく昔からあったやつですね。 [ruby-core:56902] [Feature #8842]

[555d1dda71] git 2019-04-28 23:42:46 +0900

6bedbf462544a7917fdc8d8c44276079a6e156cf のインデントのタブを空白に展開。

[fad2825e42] Takashi Kokubun 2019-04-29 00:19:58 +0900

tool/merger.rb で tag サブコマンドを安定版ブランチが git の時に対応。

[bbad0d05b3] git 2019-04-29 00:22:48 +0900

version.h の日付変更。

[2dddd370a1] Takashi Kokubun 2019-04-29 00:53:38 +0900

tool/merger.rb の removetag サブコマンドも git リポジトリ対応。

[991e32681e] Takashi Kokubun 2019-04-29 00:59:22 +0900

tool/merger.rb の大部分のメソッド定義を Merger モジュールの特異メソッドとして定義するようにするのを module 内で def << self するかわりに外で class << Merger とするようにしています。インデントを浅くするためとのこと。

[75260d36b5] git 2019-04-29 01:00:20 +0900

991e32681eac3c675ef796f5691a6786e99c3fb0 のインデントのタブを空白に展開。

[50cbb21ba5] Yusuke Endoh 2019-04-29 01:17:27 +0900

6bedbf462544a7917fdc8d8c44276079a6e156cf の Integer#[] の機能追加について NEWS ファイルに追記しています。

[f0776e3203] Kazuhiro NISHIYAMA 2019-04-29 01:23:20 +0900

Travis-CI の macOS での Permission Denied エラーのデバッグメッセージをさらに追加。検査するディレクトリを増やしている他 date コマンドで何度か時刻を表示させています。

[dfc0eeb0cf] Takashi Kokubun 2019-04-29 01:54:01 +0900

tool/merger.rb で差分のコミットも含めてブランチのリポジトリが git の場合もサポートするようにしています。

[bbb93608a3] Benoit Daloze 2019-04-28 23:17:42 +0200

13abf5519a8c00ac2b05409e667c58f05c75123a の CentOS で失敗する rubyspec の Process.clock_getres のテストの定数除外を 9a0dbb341442fc0d203a5cd6fb46250e429e9188 で括り出したヘルパーメソッドのほうに移動させています。ついでに Linux のみで除外するように範囲を限定。

[994833085a] Benoit Daloze 2019-04-28 23:20:09 +0200

ruby/mspec を upstream からマージしています。

[79671ec57e] Benoit Daloze 2019-04-28 23:20:11 +0200

ruby/spec も upstream からマージ。昨日マージしたばかりなのにもうこんなに差分が。

[daa0874056] Benoit Daloze 2019-04-28 23:29:49 +0200

rubyspec の Process.clock_getres のテストで macOS で除外する定数に CLOCK_MONOTONIC_RAW_APPROX も追加しています。

[6033423d68] Nobuyoshi Nakada 2019-04-29 10:11:44 +0900

50cbb21ba533f67e29d7da0975ba186f9e3da93f の NEWS ファイルへの Integer#[] の機能追加についてのエントリを組込みクラスのセクションに移動しています。

[812a438145] Nobuyoshi Nakada 2019-04-29 11:31:18 +0900

iseq.c の rb_iseq_disasm_recursive() で文字配列の初期化を削っています。

[69cad44fac] Kazuhiro NISHIYAMA 2019-04-29 12:21:50 +0900

Travis-CI での macOS の Permission Denied エラー調査のためのデバッグログのいくつかの ls コマンド実行を削っています。

[330b376133] Nobuyoshi Nakada 2019-04-29 12:49:59 +0900

ヒアドキュメントのマーカーをクオートすることでヒアドキュメントの文字展開の有無などを指定できますが、そのクオートを閉じる前に改行を入れても警告が出るものの parse はできていたのを、SyntaxError になるようにしています。2.4 から警告を出すようにしているからもういいだろということですね。まあこんな書きかたパズルでも作る時以外しないと思いますが。

[23375c8b81] Nobuyoshi Nakada 2019-04-29 13:42:50 +0900

test/unit の prepare_syntax_check で省略可能引数のデフォルト値を nil にしてメソッド本体でデフォルト値をセットするようにしています。第3引数の mesg のデフォルト値が第2引数の fname に依存しているので、引数の評価の順序に依存しないようにするためか、fname は省略して mesg のみ指定したい時にできなかったからかな。

[1432471a75] Nobuyoshi Nakada 2019-04-29 13:47:20 +0900

330b376133e00ae418bcf01e641e127df01fbc28 のヒアドキュメントのクオートされたマーカー内の改行を SyntaxError にする変更で LF のみエラーにしていたのを CR もエラーにするようにしています。

[c7f780c155] Nobuyoshi Nakada 2019-04-29 17:45:58 +0900

たぶんヒアドキュメントのクオート内の改行を禁止したからできるようになったのだと思いますが parse.y の struct rb_strterm_heredoc_struct の構造体メンバーを変更して共用体内に入ってた lastidx を削除してマーカーの終端は offset, length などのメンバーから計算できるようにしています。またクオートの有無を保持する bit field quote や、どの種類の関数で処理するかを示す func というメンバーも増やしています。

[6a3165e19d] Nobuyoshi Nakada 2019-04-29 18:32:21 +0900

c7f780c155ac553aa026e6caf4b1c88ff988adde でリファクタリングした構造体 struct rb_strterm_heredoc_struct のサイズを調整するのに使ってるマクロ HERETERM_LENGTH_BITS を LLP64 環境に向けて再修正しています。