search
LoginSignup
11

More than 3 years have passed since last update.

posted at

updated at

PHABRICATORの使い方

FreeBSDではコードレビューにPhabricator(ファブリケーター)を使っています。PhabricatorはFacebookで作られたオープンソースのようです。

githubではpullreqでレビューを行いますが、FreeBSDではsvnでもコードを管理しているので、githubのpullreqではなく、Phabricatorを使っているのだと思います。

このページはgitベースでPhabricatorのコードレビューを出してみて操作のメモです。もっと良い方法があるかもしれませんが、複雑な処理が嫌いなので、以下のような単純な操作にしています。

Phabricatorはarcというphpで作られたコマンドで処理を行うので、まずこれをインストールしておきます。

11.2Rでは以下のパッケージのどれかを入れます。

% pkg search arcanist
arcanist-php56-20180420_1      Command line interface for Phabricator
arcanist-php70-20180420_1      Command line interface for Phabricator
arcanist-php71-20180420_1      Command line interface for Phabricator
arcanist-php72-20180420_1      Command line interface for Phabricator

FreeBSDのCodeReviewのページにあるようにFreeBSDのPhabricatorのアカウントを作って、arcの初期設定を行います。

これで準備はできたので、実際のレビューを出します。

ローカルでレビュー用のブランチを作成します。

% git checkout master
% git checkout -b review_branch

これで下の図のAの時点のcommitでreview_branchがcheckoutされました。

arc_diff.png

レビューを依頼する修正を反映します。普通はワーク用の別ブランチから下記のようにファイルをコピーしてくる事になると思います。

% git checkout work_branch -- hogehoge.c

レビューのファイルがすべて準備できたら、git commitはせず、下記のarcコマンドを実行します。(B)

% arc diff --create

いくつかの質問項目を入力すると、レビューが作成されます。レビュー作成されるとURLが表示されブラウザベースで確認できます。

レビューについてコメントが付き修正したときは下記のようにarcコマンドを実行します。(C)

% git commit -a -m "review refict"
% arc diff

diffの--updateオプション使っていたら、おかしなことになって使わないようにしました。

レビューの差分すなわちAとreview_branchの差分は以下のコマンドで確認できます。

% git diff `git merge-base origin/master HEAD`..HEAD

レビュー中のdiffを別のブランチに反映したい場合はexportしてpatchコマンドでできます。patchコマンドに-V noneオプションをつけるとBackupファイルを作りません。

% arc export --revision D10740 --git | patch
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff --git a/sys/dev/etherswitch/rtl8366/rtl8366rbvar.h b/sys/dev/etherswitch/r
tl8366/rtl8366rbvar.h
|--- a/sys/dev/etherswitch/rtl8366/rtl8366rbvar.h
|+++ b/sys/dev/etherswitch/rtl8366/rtl8366rbvar.h
--------------------------
File to patch: ^Cmicroserver % arc export --revision D10740 --git | patch -p1
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff --git a/sys/dev/etherswitch/rtl8366/rtl8366rbvar.h b/sys/dev/etherswitch/r
tl8366/rtl8366rbvar.h
|--- a/sys/dev/etherswitch/rtl8366/rtl8366rbvar.h
|+++ b/sys/dev/etherswitch/rtl8366/rtl8366rbvar.h
--------------------------
Patching file sys/dev/etherswitch/rtl8366/rtl8366rbvar.h using Plan A...
Hunk #1 succeeded at 30.
Hunk #2 succeeded at 176.
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff --git a/sys/dev/etherswitch/rtl8366/rtl8366rb.c b/sys/dev/etherswitch/rtl8
366/rtl8366rb.c
|--- a/sys/dev/etherswitch/rtl8366/rtl8366rb.c
|+++ b/sys/dev/etherswitch/rtl8366/rtl8366rb.c
--------------------------
Patching file sys/dev/etherswitch/rtl8366/rtl8366rb.c using Plan A...
Hunk #1 succeeded at 54.
Hunk #2 succeeded at 76.
Hunk #3 succeeded at 149.
Hunk #4 succeeded at 219.
Hunk #5 succeeded at 273.
Hunk #6 succeeded at 329.
Hunk #7 succeeded at 375.
Hunk #8 succeeded at 390.
Hunk #9 succeeded at 406.
Hunk #10 succeeded at 482.
Hunk #11 succeeded at 658.
Hunk #12 succeeded at 702.
Hunk #13 succeeded at 717.
Hunk #14 succeeded at 742.
Hunk #15 succeeded at 768.
Hunk #16 succeeded at 781.
Hunk #17 succeeded at 927.
Hunk #18 succeeded at 952.
Hmm...  Ignoring the trailing garbage.
done

レビューの一覧は以下のように見れます。

% arc list
* Needs Review D6796: Add RTL8366SR support at etherswitch driver
* Needs Review D6832: enable phy4 and mac4
* Needs Review D7238: Add support Ralink RT1310 soc
* Accepted     D8344: add marvell 88e6060 support on etherswitch

レビューが終わってheadにcommitされCloseになると、リストから消えます。

その後、上の図でmasterをwork_branchにmargeするとコンフリクトしてしまうようです。とりあえず自分が作ってたものをいったんmvでリネームしてmasterのファイルをcheckoutして、それからマージすると良いようです。確認できたらリネームしたファイルを消します。

review_branchブランチは不要になるので、下記のコマンドで削除します。

% git branch -D review_branch

作業しているツリーでbranchを作って、checkoutしてレビュー出して、作業branchに戻ってビルドすると、フルビルドになってしまうようです。レビューのツリーと作業ツリーは別にした方が良いです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
11