強制code review:reviewboard+svnのシナリオ


頼勇浩(http://laiyonghao.com)
2012年2月22日更新:ドキュメントを0.1.2-r 14バージョンと同期させる(変更部分は青色#3333 FFを使用).
2012年3月8日更新:ドキュメントを0.1.2-r 16バージョンと同期させる(変更部分は赤#CC 0000を使用).
2012年4月28日更新:ドキュメントを0.1.3-r 16バージョンと同期させる(変更部分は濃い紫色#993399を使用).
2013年10月17日更新:文書を0.2.1-r 20バージョンと同期させる(変更部分はマゼンタ#FF 6666を使用).私たちのチームは「天下盛境」プロジェクトを開発する時、比較的良いcode review戦略を制定し、実行し、いくつかの利点をまとめた:1つはコードスタイルが制御可能で、コード品質が一定に向上している;第二に、新入社員が入社した後、より多くの人の指導を受けることができ、成長が非常に速い.三つ目は、小さなバグが頻出している状況が、私が「天」を作る前のプロジェクトより少なくとも1つの数量グループ少ないことです.当時、私たちのcode review戦略はこうでした.
  • reviewboardをツールとして使用し、SVN hooksによって毎回チェックインがreviewを通過することを強制する.
  • には、少なくとも2人のチームメンバーship itが署名できます.
  • ship itのメンバーのうち、少なくとも1人はベテランのチームメンバーです.

  • code reviewはこのように有効で、私はよく友达に推薦して、いくつかの友达が使った後、reviewboardとSVNを結果的にするのはやはり挑戦的だと思って、主にSVN hooksを書くのはやはり多くのものを学ぶ必要があるので、基本的に彼らはすべて放棄しました.今日はreviewboard-svn-hooksプロジェクトを修正、発表して、皆さんが使いやすいようにしました.
    まずreviewboard-svn-hooksのサポートに感謝します.0.1.0バージョンがリリースされた後、多くの友达が使用を試み始めました.多くの問題に遭遇しました.諦めないで、積極的に私とコミュニケーションして、非常に詳細なエラー情報を提供してくれました.ここで感謝します.0.1.2バージョンでは、Windowsで実行中にWindowsError[Error:6]エラーが発生した原因を特定し、迂回した解決策を示します(以下を参照).インストール時にプロファイルが作成されなかった理由が見つかり、迂回した解決策が示されました(以下を参照).reviewにプロパティのみを指定するファイルの機能(review srcディレクトリの下のファイルのみ)が追加されました.
    0.1.2-r 16はwindowsとの互換性をさらに強化した.同時にdebug logにも時間が表示されます.review_pathが空の場合、reviewのすべてのsvnコミット要求を強制することを示します.
    0.1.3-r 16はpython 2.6への依存を取り消し、py 2.5と互換性がある.修正しましたreview_path、experts切断のエラー.
    アップグレード
    バージョン0.1.0からアップグレードする場合は、次の2つの点に注意してください.
  • $COFDIR/reviewboard-svn-hooks/conf.iniをバックアップしてください.アップグレードすると、このファイルは新しいファイルで上書きされます.再構成の面倒を避けるために、先にバックアップしてください.
  • $COFDIR/rb-svn-hooks-used-rid.dbファイルは$COFDIR/reviewboard-svn-hooks/rb-svn-hooks-used-rid.dbに移動しました.アップグレード後、古い場所の.dbファイルを手動で新しい場所に移動してください.$COFDIRの値については、linuxシステムでは/etc、windowsでは%ALLUSERSPROFILE%環境変数で指定された値になります.

  • いずれかの以前のバージョンからアップグレードするには、上記の方法でconf.iniをバックアップする必要があります.
    インストール
    だってeasy_install/pipなど自身の理由でeasy_をそのまま使用Install-U reviewboard-svn-hooksをインストールまたはアップグレードすると、サンドボックスエラーが発生します.インストール時にお越しくださいhttp://pypi.python.org/pypi/reviewboard-svn-hooks 圧縮ファイルを手動でダウンロードし、解凍してreviewboard-svn-hooksディレクトリに入り、以下のコマンドを実行してインストールします.
    python setup.py install

    コンフィギュレーション
    インストール後、reviewboard-svn-hookプロジェクトを構成する必要があります.オペレーティングシステムによっては、プロファイルを格納するディレクトリも異なります.linuxシステムの下で、その位置は/etcの下で、windowsシステムの下で、その位置は%ALLUSERSPROFILE%ディレクトリの下で(具体的にどのディレクトリを指して、参照してくださいhttp://en.wikipedia.org/wiki/Environment_variable#Default_Values_on_Microsoft_Windows).本明細書では、$COFDIRで表される.$COFDIR/reviewboard-svn-hooks/conf.iniファイルを開きます.次のように説明します.
    [common]
    #      debugging   ,0     ,      
    debug = 0
    
    [reviewboard]
    # reviewboard    
    #         ,  http://example.com/reviewboard/              “/”
    url=
    # reviewboard       ,        http API     reviewboard    review request    
    username=
    password=
    
    [rule]
    #         ship it
    min_ship_it_count =
    #           ship it
    min_expert_ship_it_count =
    #     reviewboard    ,        
    experts =
    
    # ---------    0.1.2-r16    ---------
    # ---------    0.1.2-r14    ---------
    #      review    ,      ,                       ,      review   
    #     ,      review       
    #   : review_path = src, "cc/d,oc"
    #                  src   cc/d,oc        review,
    #              
    
    review_path = 
    
    # ---------    0.2.1-r20    ---------
    #            ignore_path  ,       。
    
    ignore_path = 

    SVN hooks構成
    SVN倉庫ディレクトリの$REPOSを仮定し、SVN hooksを設定したことがありません.pre-commitを以前に構成した場合は、次のスクリプトを参照してstrictを呼び出す方法を考えてください.reviewアプリケーション.
    linux
    $REPOS/hooksディレクトリを開き、pre-commit.tmplをpre-commitと改名し、実行権限を加えてください.テキストエディタでpre-commitファイルを開き、中の内容をすべて削除し、次の内容に置き換えます.
    REPOS="$1"
    TXN="$2"
    strict_review $REPOS $TXN
    exit $?

    これで、構成は完了します.
    windows
    $REPOS/hooksディレクトリを開き、pre-commit.tmplをpre-commit.batに名前を変更します.テキストエディタでpre-commitファイルを開き、中の内容をすべて削除し、次の内容に置き換えます.
    setlocal
    set REPOS=%1
    set TXN=%2
    ; ---------    0.1.2-r16    ---------
    ; ---------    0.1.2-r14    ---------
    C:\python26\python.exe C:\python26\Scripts\strict_review-script.py %REPOS% %TXN%
    exit %errorlevel%

    C:python 26というディレクトリを、本機のpythonインストールパスに置き換えてください.これで、構成は完了します.
    すでに使用されているreviewboardと統合する前にreviewboardを使用して何度もcode reviewをしたことがある場合は、以前に使用したreview request idを廃棄する作業が必要です.まず、使用した最大のreview request idを見つけてメモし、コマンドラインで次のコマンドを実行します.
    # ---------    0.1.2-r14    ---------
    
    init_used_rid_db $CONFDIR/reviewboard-svn-hooks/rb-svn-hooks-used-rid.db $MAX_REQ_ID

    ここで、$CONFCIRの値は前述の通り、$MAX_REQ_IDは前述した最大のreview request idです.
    レビューフロー
    チームメンバーは、コードをコミットする前にpost-reviewツールを使用してreview boardにreview requestを作成する必要があります.構成の良いreviewboardはすべてのメンバーに自動的にメールを送信することができ、メールの通知を受け取った後、みんなは暇を見つけてreviewコードに行き、reviewの結果もメールでみんなに知らせるので、reviewを始めた同僚はすぐにreview requestを知ることができます.  と入力します.十分なship itが収集されると、彼はSVNに変更を提出することができます.唯一注意しなければならないのは、log messageに正規表現r'review:([0-9]+)'に合致する情報を書くことです.例えば、review:1999は、今回提出した変更対応IDが199のreview requestを表し、strict_reviewというhookはreview request 199が予め設定された条件に合致していることを検出すると、変更を倉庫に入れるように放行する.
    その他最後に、使用中に何か問題があったら、http://code.google.com/p/reviewboard-svn-hooks/issues/list ティissueが教えてくれた