Mercurialを使用したコードレビューの推奨プロセス


18

通常はPerforceとSmartBearのCode CollaboratorをBig Corp使用していましたが、特定のプロジェクトではMercurialを使用する予定です。

Code CollaboratorはMercurial(バージョン5を使用しています)をサポートしており、コードレビューの最適な時間(サーバーへのコミット/プッシュ中)プロセスが最適な時間であるかどうかを判断しようとしています。

ありがとう


おそらく2つの質問を分ける必要があります。()ここに属しているが、(b)は、おそらくstackoverflowのかserverfaultのに属します
blueberryfields

@blueberryfieldsに感謝します。私は実際に問題を修正しました、問題はbin / hg.cmdファイルがパスにあり、exeがないことでした。
cbrulak

回答:


22

私たちは最近、私の会社でほぼ同じことを実際に経験しました。これが私たちのしたことです:

  • 1つのサーバーにすべてのリポジトリの最終的なコピーを保持します。開発者がコードを「チェックアウト」したい場合、彼らはこのサーバーに行き、そこのリポジトリからクローンを作成します。同様に、開発サイクルが完了すると、コードも適切なリポジトリにプッシュされます。

  • 安定したリポジトリを開発リポジトリから分離ます。コードを安定したリポジトリにプッシュする前にレビューする必要があります。(安定したリポジトリには、現在運用中のコードが含まれている必要があり、保留中のコードプロモーションのみが異なるため、これは重要です。)

コードレビューを実施するために、pretxnchangegroupフックを作成しました(HG Bookに文書化されています)。このフックが実行されると、コードの変更が永続的であるかのようにリポジトリを見ることができるという事実を活用しますが、プッシュを防ぐ機能も提供します。基本的に、プロセスは次のとおりです。

  1. 開発者は安定したリポジトリへのプッシュを開始します(はい、これが実際の最初のステップです)
  2. フックが実行され、トランザクションに含まれるすべての変更セットのリストを取得します(HGログを実行します)。次に、構築したデータベースを照会して、それらの変更セットがコードレビューに含まれているかどうかを確認します。(テーブルは、コードレビューIDを持つチェンジセットのハッシュと一致します)。
    • これらの変更セットのいずれかが初めて表示された場合、(コードコラボレーターコマンドラインを使用して)新しいコードレビューを作成し、そのコードレビューのIDでこれらの変更セットをデータベースに記録します。
    • 変更セットの一部(すべてではない)を確認した場合、(コードコラボレーター)コマンドを実行して、新しい変更セットを既存のレビューに添付し、これらの新しい変更セットをデータベースに記録します。
    • データベースですべての変更が見つかった場合(つまり、すべてがコードレビューに追加された場合)、コードレビューのステータスが完了であることを確認します。ただし、新しい変更セットがあった場合(またはコードレビューが完了していない場合)、フックはゼロ以外のステータスコードで終了し(Mercurialがトランザクションをロールバックする)、開発者に説明する標準エラーでわかりやすいメッセージを出力しますコードレビューを完了する必要があること。

本質的に、これは開発者に非常に合理化されたプロセスを提供し(必要なのはhgプッシュのみ)、すべてのコードがレビューされることを保証しながら、コードレビューの作成を完全に自動化します(および追加の変更されたファイルをレビューにアップロードします) 。

注:これは非常に単純なプロセスであり(比較的新しい)、すべてのユーザーに有効なわけではなく、まだ実行されていない設計上のバグがある可能性があります。しかし、これまでのところ、非常にうまく機能しています。


コードレビューの前に安定した環境にチェックインする決定について説明してください。私にとって、安定は間違った名前のようです。
ヨルダン

1
おそらく答えからは明らかではありませんでしたが、コードレビューにすべての変更が追加されてレビューが完了しない限り、実際にはリポジトリに反映されません。フックがゼロ以外の終了コードで終了した場合、Mercurialはプッシュされていたすべての変更をロールバックします。したがって、その特定のフックは、レビューの差分を取得するだけでなく、リポジトリへの変更が許可される前にレビューを実施するための非常に便利な場所を提供します。
ライアン

1
ワオ。あなたのために仕事に来てもいいですか?
リッチ

@Ryan-pretxnchangegroupフックをどのように実装しますか。あなたが提供するリンクは、それがどのように実装できるかについての詳細な説明を与えず、フックを置く場所に従うべき機能テンプレートの種類を与えません。Pythonの経験はありません。正しいソースまたはpretxnchangegroupフックのテンプレートにリダイレクトしてください。Ta
シンプルソリューション

2

これは、リポジトリー構造がどのようになっているか、何を達成しようとしているかによって異なります。DVCSの世界では実際に「事前プッシュ」を意味する「事前コミット」レビューを行うことを好みます。DVCSは(従来のSCMと比較して)この環境で優れています。ローカルの変更を保存し、ワークスペースを元に戻して他の作業を行える機能が組み込まれているためです。

プッシュ後のレビューを行う場合、理想的なワークフローはリポジトリ構造に大きく依存します。たとえば、Gitリポジトリレイアウトに関するこの記事で説明したようなリポジトリ構造を想定します。この場合、にマージされている変更を確認することをお勧めしますdevelop。機能ブランチでの個々のコミットは、レビューする意味がない場合があります。明らかに、すべてhotfixesへのマージとともにレビューする必要がありますmaster

代わりに、人々が直接チェックインする単一の統合ブランチがある場合、そのブランチへのすべてのプッシュをレビューする必要があります。それはおそらくわずかに効率が悪いですが、それでも動作する可能性があります。この環境では、リリースをカットする前に、プッシュされたすべての変更を確認する必要があります。それは難しいかもしれません。

b)に関しては、SmartBearサポート(support@smartbear.com)に直接メールすることをお勧めします。私たち(はい、SmartBearで働いています)は、パスの問題を解決するお手伝いをさせていただきますが、この質問には問題を修正するのに十分な情報がありません。通常のプロセスは、インストーラーを実行するだけで、すべてが機能します。どうやらそのプロセスで何かがおかしくなったようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.