CommitterHowto

コミッタ固有の事項について。開発者全般については DeveloperHowtoJa を参照のこと。

committer になるには

  • 標準添付ライブラリやブランチのメンテナを募集しているときに、行動を起こす。
  • 便利なライブラリを公開すると、そのライブラリを標準添付に取り込みたいのでcommitterになってメンテナンスしろと言われる(最近はあまりない)
  • コンスタントにrubyを改良するパッチを投げ続けていると、そのうちcommitter になれ、と言われる。
  • Rubyを抜本的に改善するパッチを投げると、committerになってそれをメンテナンスし続けろ、と言われる。
  • 未知のプラットフォームにrubyを移植して大量のパッチを投げると、committer になれ、と言われる。
  • Linus Torvalds - Part II : Open Voices: The Linux Foundation Podcastから引用(原文):
    • Jim Zemlin: 最後に、Linux の最前線で活動に参加したいと思っている組織や個人に対し何かアドバイスはありますか?
    • Linus Torvalds: 「何から始めたらいい?」という質問をしょっちゅう受けるけど、ぼくのアドバイスはそんな質問するなってことだけだね。 むしろ自分が挑戦したいと思うことがわかりきっているぐらいある特定の分野に興味を持っているのでないなら、挑戦しちゃだめだ。 そいつはさっさとあきらめて、もし「ぼくの方がうまくやれる」と言えるものに出会い、口だけのやつから実行するやつになる気が起きたとき、自分自身で答えが見つかるよ。

committer になることになったら

まず、matz の承認をもらう。

もらったら、次の情報を提供する。[]

  • PGP公開鍵
  • 希望アカウント名
  • SSH2の公開鍵
  • @ruby-lang.org宛のメールを転送するメールアドレス

これらの情報を 指定されたアドレス(作業担当者)に送る。[]

送るときには PGP で署名する。[]

必要なツール

  • そのプラットフォームの開発ツール一式
  • ruby (1.9 はビルドに ruby が必要)
  • subversion
  • SSHクライアント
  • GnuPG
  • MUA
  • IRCクライアント
  • autoconf (2.60以降)
  • bison
  • (gperf)
  • (git)

あると便利なツール

gpg コマンドの使い方

PGP 鍵の生成の仕方

メールの署名の仕方

SSH2公開鍵の作り方

OpenSSHの入っているプラットフォームでは既に~/.ssh/id_rsaや~/.ssh/id_dsaがあるかもしれない。その公開鍵id_rsa.pub, id_dsa.pubを使っても良い。

無い場合はssh-keygen(1)で作成する。

$ ssh-keygen -b 2048 -f ruby_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): <パスフレーズ> 何か打ち込む
Enter same passphrase again: <パスフレーズ確認入力>
Your identification has been saved in ruby_key.
Your public key has been saved in ruby_key.pub.
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX your@hostname

秘密鍵ruby_keyと公開鍵ruby_key.pubが生成される。秘密鍵は絶対に他人に見せないで大切に保管しておく。公開鍵を作業担当者に渡す。

IRC関連

  • LimeChat - for win, mac
  • Nadoka
  • XChat (X), XChat-gnome (Gnome)
  • riece (emacs)

committer になったら

  • ソースディレクトリ以外でビルドする
    • /path/to/somewhere/src 内にソース、/path/to/somewhere/obj 内でビルドするなら、objの中で../src/configureとか。
  • ソースディレクトリでもビルドする ./configure
  • ruby-dev, ruby-core, ruby-cvs の購読
  • redmine にユーザ登録
    • アカウントはChangelogに書き込んだりメーリングリストに投稿したりするのに使っているメールアドレスで登録すべき。
    • [[Ruby]]などのプロジェクトの開発者メンバー (Developer) に登録して貰う (コミッタが追加権限を持っている)

さらに余力があれば

  • GPG鍵にちゃんとキーサインをもらう
    • コミッタ同士でもサインすると良い
    • 名刺にfinger printを刷ると良い
  • IRC (IRCnet: #ruby-ja または freenode: #ruby-ja) へ参加する。
  • Coverityにアカウントを作る
    • アカウントの作り方はちょっと面倒なので、ircなどで他のコミッタに聞く。
  • github にアカウントがあるなら your-svn-account@b2dd03c8-39d4-4d8f-98ff-823fe69b080e を Email Addresses に追加する。 ( https://github.com/ruby/ruby/commits/trunk などでアイコンが出てくるようになる)
  • ruby-committers.yml へのパッチを<yugui AT yugui.jp>に送る。CodeReposのアカウントがあれば自分で更新しても良い。

commit するときには

合意形成

  • 仕様変更・機能追加はメーリングリストで合意ができてから or Matzやメンテナが認めてから
  • typoを直したぐらいのものは勝手にコミットする
  • コミットしてしまって怒られたら戻せばよいので、加減は怒られながら覚えること。
  • minirubyだけでなくruby自体もビルドできることを確認してからコミットする
    1. make testすると更に良い
    2. make test-allすると更に良い
    3. make test-rubyspecもすると更に良い

連絡

  • 一部のライブラリは外部でメンテナンスされていて、Rubyのリポジトリにあるのはコピーである。
    • これらはコミット後にメールでメンテナに連絡する。
    • 時間的余裕があれば、メンテナとメーリングリストにパッチを送ってメンテナにコミットしてもらうと更に良い。

該当するのは

  • miniunit
  • rdoc
  • rubygems
  • rake
  • soap (1.8)
  • wsdl (1.8)

subversion

  • subversion の設定
    • []
  • ssh の設定
    • pass phrase を commit 毎に入力したくないとき: ssh-agent
    • .ssh/config
  • branch
    • 開発版は幹 (trunk)
    • 安定版は枝 (例: ruby_1_8, ruby_1_8_6)
  • commit 単位
    • changeset ごと
  • commit log

    • 下記 ChangeLog の記述内容から、変更内容についての部分を抜き出すだけ。(ChangeLogのヘッダは除く、タブインデントも入れない) 以下のような感じ
    • filename.c (rb_xxx_yyy): short description of this commit. Fixes [ruby-dev:XXXX]. (rb_zzz_aaa): yet another part.
    • filename.h (MACRO_NAME): value changed.
    • Redmine に対する指示を入れられる
    • WikiJa commit log による close。例 fixes [Bug #123]
    • closeでなくともチケットに関係がある場合は参照を含めるべき。例 see [Feature #123]
    • GitHub に対する指示を入れられる
    • Link to GitHub issue number with commit message?
    • Closing Issues via Commit Messages 例 [fixes GH-123]
    • Closing Issues Across Repositories
    • 上記 Redmine への指示と紛らわしいので、"fixes GH-123" や "fixes ruby/ruby#123" がよいと思われる
    • Travis CI に対する指示を入れられる
    • How to skip a build 例 [skip ci]
  • svn mail

  • 最近svnサーバーが別のサーバーに移設され,サーバーサイドのssh鍵が変わっているためsvnがエラーを吐く場合は~/.ssh/known_hostsから一旦レコードを消してみるといいかもしれません.

ChangeLog

GNU Coding Standards : Change Logs

Thu Jan 1 00:00:00 2004 Your Name yourmail@example.com

* filename (function): short description of this commit.
  This should include your intention of this change.
  [mailinglist:number]

* filename2 (function2): additional description for this file/function.</pre>
  • 日時は JST。上記形式で。
  • 日時と名前の間はスペース2文字。名前とメールアドレスの間もスペース2文字。
  • 1行あけて、コミット内容について記述する。コミット内容行頭はタブ文字でインデント。2行目はタブ+スペース2文字。
  • 変更内容を一単位として、変更したファイル名、変更した関数やメソッド名、変更についての説明、を記述する。
  • 変更についての説明は、理由(どうして変更が必要になったか)と効果(どのような違いが発生するか)を重視して記述する。
  • もしあれば、対応するメーリングリストでの議論(の先頭あたり)への参照を記述する。
  • 複数の変更を同時にコミットする場合、1行空けて再び変更内容を記述する。
  • 基本的に、他者のこれまでの記述方式を参考にすればよい。
  • ChangeLog に記載するかどうかの基準: []
    • typoを直したとか、細かいことは書かなくて良い
    • 貢献者/報告者への献辞を書くかどうか
    • 他人のコードをコミットする時は敬意を払って注意深く []
    • 迷ったときには記載することにすれば間違いはない

テンプレート

Thu Jan 1 03:03:03 2004 Your Name yourmail@example.com

* filename.c (rb_xxx_yyy): short description of this commit.
  Fixes [ruby-dev:XXXX].
  (rb_zzz_aaa): yet another part.

* filename.h (MACRO_NAME): value changed.

Thu Jan 1 02:02:02 2004 Your Name yourmail@example.com

* filename.rb (XXXX#yyyy): short description of this commit.
  Patch by Foo Bar <foo-bar AT example.org>.

Thu Jan 1 01:01:01 2004 Your Name yourmail@example.com

* filename.c (rb_aaa_bbb): short description of this commit.
  See [ruby-core:XXX].
  Reported by Baz Qux <baz-qux AT example.org>.</pre>

RDoc

RDocをちゃんと書くと良い。

リファレンスマニュアル

svn:ignore

情報の発信

ruby-lang.orgから情報を発信するには。

Subversion

ci.ruby-lang.orgにコミットするとsvn.ruby-lang.orgにも同期される。

管理作業依頼はcvs-admin AT ruby-lang.orgへメール

FTP

carbonのSSHアカウントをもらってSCPでアップロード

WWW

  • redmineから、wwwチームへ依頼する
  • なんかあれば webmaster AT ruby-lang.orgへメール

Redmine

  • Wikiはアカウントがあれば勝手に編集できる。
  • 改善依頼やバグ報告はredmine
  • なんかあれば its-admin AT ruby-lang.orgへメール

サーバの情報

  • lithium, carbon, boron
  • 現在の状態
    • ci.ruby-lang.org:
    • svn (開発用・非公開)
    • svn.ruby-lang.org:
    • Anonymous svn: svn.ruby-lang.org
    • 問題追跡システム: redmine.ruby-lang.org
    • carbon.ruby-lang.org:
    • WWW: www.ruby-lang.org, raa.ruby-lang.org
    • FTP: ftp.ruby-lang.org
    • Anonymous CVS: cvs.ruby-lang.org
    • メーリングリスト
    • boron.rubyist.net:
    • WWW: www.rubyist.net
  • 元素のリスト

その他

  • コンパイルに必要なツール
    • autoconf (2.60以降)
    • bison
    • (gperf)
    • (ruby) (1.9 はレポジトリからのビルドに ruby が必要)
  • テスト
    • テストの追加 (bootstraptest と test)
    • テストの実行
    • make test
    • make test-all
    • make check は test と test-all を両方やる
  • RubySpecとの連携
    • make update-rubyspec で取得
    • 取得にはgitクライアントが必要
    • 今はtrunkではyuguiの独自版を参照中。1.9のspecが本家にマージされたら本家を参照する予定
    • make test-rubyspec で検証
  • diff の形式
    • unified diff 推奨 (-u)
    • -p 推奨 (svn diff でも)
  • メールでの MIME の使い方
    • blade でどう表示されるか
  • ViewVC
  • ML : ruby-dev, ruby-list, ruby-core, ruby-talk
  • commit mail (ruby-cvs)
  • IRC channel
    • IRCnet: #ruby-ja #Ruby:*.jp
  • CIA Open Source Notification System
  • .document
  • version.h
    • 日時はJST
    • その日最初のコミットの後に自動で更新コミットが入る
  • NEWS
    • 大きな変更の時に書く

歴史的な情報

  • MANIFEST

CVS

昔はCVSでした。

version.h 更新機構の履歴

サーバーの履歴