Hatena::ブログ(Diary)

A Day in Serenity @ Kenji

2012-02-23

もし FuelPHP のバグを見つけたら (6)〜Pull Request が本家に取り込まれたら

の続きです。

前の記事を読んでいない場合は、先に読むことをお薦めします。

Pull Request の修正も完了し、送信した Pull Request が本家に取り込まれたら、あなたもれっきとしたコントリビュータです。

コントリビュータの一覧に名前が載っていることでしょう。

これで、あなたが修正したバグは永久になくなりました。もう、「何々がバグってる〜」みたいなツイートをする必要はありません。

Pull Request 用ブランチの削除

Pull Request 用のブランチ (ここでは fix_form) はもう必要ありません。削除しましょう。

ローカルのブランチを削除しましょう。まず、開発ブランチを最新にしておきます。

$ git checkout 1.1/develop
$ git fetch upstream
$ git merge upstream/1.1/develop

それではローカルのブランチを削除します。

$ git branch -d fix_form

リモート (GitHub 上) のブランチを削除します。

$ git push origin :fix_form

これで、Pull Request 用のブランチが完全に削除されました。めでたし、めでたし。

2012-02-20

もし FuelPHP のバグを見つけたら (5)〜Pull Request 後の修正

の続きです。

前の記事を読んでいない場合は、先に読むことをお薦めします。

今日は、Pull Request 後にコア開発者などからコメントが付いて、Pull Request した変更を修正する場合です。

修正前の準備

まず、1.1/develop ブランチを最新の状態にします。

$ git checkout 1.1/develop
$ git fetch upstream
$ git merge upstream/1.1/develop

ログを確認すると、以下のように開発が進んでいます。

f:id:Kenji_s:20120218114332p:image

Pull Request 用のブランチ(ここでは fix_form)を rebase して最新状態を反映させましょう。-f オプションを忘れないように。

$ git checkout fix_form
$ git rebase -f upstream/1.1/develop

First, rewinding head to replay your work on top of it...

Applying: improve Form::prep_value

Using index info to reconstruct a base tree...

Falling back to patching base and 3-way merge...

Auto-merging classes/form/instance.php

Auto-merging tests/form.php

CONFLICT (content): Merge conflict in tests/form.php

Failed to merge in the changes.

Patch failed at 0001 improve Form::prep_value

When you have resolved this problem run "git rebase --continue".

If you would prefer to skip this patch, instead run "git rebase --skip".

To restore the original branch and stop rebasing run "git rebase --abort".

コンフリクトしましたので、エディタで開いて修正します。修正が完了したら、

$ git add tests/form.php
$ git rebase --continue

として rebase を完了します。これで、Pull Request に修正を追加する準備ができました。

Pull Request の修正

普通に修正してコミットします。sign-off を忘れずに。

そして、GitHub に Pull Request 用のブランチを push します。-f オプションを忘れないように。

$ git push -f origin fix_form

push が完了すれば、Pull Request に自動的に反映されます。これで完了です。

もし FuelPHP のバグを見つけたら (6)」へ続く。

2012-02-11

CodeIgniter のバージョンの調べ方

検索キーワードにあったので、CodeIgniter のバージョンの調べ方を記載しておきます。

CodeIgniter のバージョンは、(CodeIgniter 1.5 とかは違うみたいですが、少なくとも 1.6.0 以降は) 定数 CI_VERSION に定義されています。

この定数は、CodeIgniter 2.0 以降は、

  • system/core/CodeIgniter.php

で、CodeIgniter 1.7.3 以前は、

  • system/codeigniter/CodeIgniter.php

で定義されています。

2012-02-10

FuelPHP のコードカバレッジ

FuelPHP には PHPUnit による FuelPHP 本体に対するユニットテストが付属していますが、まだテストは十分とは言えません。

PHPUnitコードカバレッジ解析 で実際に解析してみましょう。

なお、解析には Xdebug が必要です。

カバレッジレポートの作成

oil test コマンドでは phpunit の --group と --coverage-html オプションのみは使えます。

$ oil test --group=Core --coverage-html=./coverage

これで、converage フォルダにレポートが作成されます。

作成されたレポートを以下にアップしました。

f:id:Kenji_s:20120207143011p:image

このレポートには、テストがまったくされていないコードは含まれません。

Lines 41.48% 1356/3269

となっていますが、実際には fuel/core 以下のコードは、以下のように 37421行あります。

Lines of Code (LOC):                              63198
  Cyclomatic Complexity / Lines of Code:           0.14
Comment Lines of Code (CLOC):                     25777
Non-Comment Lines of Code (NCLOC):                37421

ということで、みんなでテストをどんどん書きましょう♪

関連

2012-02-09

CodeIgniter 本体のユニットテスト

久しぶりに feature/unit-tests ブランチ で進められている CodeIgniter のユニットテストの状況を調べてみました。

残念ながら、ほとんど進んでいませんが、現状を確認してみます。

準備

PHPUnit 3.6 ではテストを実行できませんでした。

PHPUnit 3.5 と vfsStream をインストールします。

$ sudo pear channel-discover pear.phpunit.de
$ sudo pear install phpunit/PHP_TokenStream-1.0.1
$ sudo pear install phpunit/PHPUnit_Selenium-1.0.1
$ sudo pear install phpunit/PHPUnit_MockObject-1.0.3
$ sudo pear install phpunit/PHP_Timer-1.0.0
$ sudo pear install phpunit/File_Iterator-1.2.3
$ sudo pear install phpunit/PHP_CodeCoverage-1.0.2
$ sudo pear install phpunit/DbUnit-1.0.0
$ sudo pear install phpunit/PHPUnit-3.5.15
$ sudo pear channel-discover pear.php-tools.net
$ sudo pear install pat/vfsStream-alpha

もし、PHPUnit 3.6 がインストール済みの場合は、

$ sudo pear list -c phpunit

インストール済みのパッケージを確認し、

$ sudo pear uninstall phpunit/パッケージ名 ...

ですべて削除してから、PHPUnit 3.5 をインストールしてください。

feature/unit-test ブランチのダウンロード

$ git clone -b feature/unit-tests git://github.com/EllisLab/CodeIgniter.git

テストの実行

$ cd CodeIgniter/tests
$ phpunit

カバレッジはこんな感じでした。

f:id:Kenji_s:20120207164231p:image

ちなみに、system フォルダ以下の行数は、こんな感じです。

Lines of Code (LOC):                              51444
  Cyclomatic Complexity / Lines of Code:           0.15
Comment Lines of Code (CLOC):                     24333
Non-Comment Lines of Code (NCLOC):                27111