[インデックス 19503] ファイルの概要
このコミットは、Goプロジェクトのコードレビューシステムで使用されるcodereview.py
スクリプトの変更です。具体的には、プライベートな変更リスト(CL: Change List)に対して、デフォルトのCC(Carbon Copy)受信者(defaultcc
)が自動的に追加されないように修正しています。これにより、プライベートなCLの意図されたプライバシーが保護されます。
コミット
commit 32a5c898e3bd7d3abf1b6f6dc5ef4a23c5d32d8f
Author: Russ Cox <rsc@golang.org>
Date: Thu Jun 5 16:40:09 2014 -0400
codereview: do not add defaultcc for private CLs
LGTM=r
R=r, 0xjnml, bradfitz, iant
CC=golang-codereviews
https://golang.org/cl/103070046
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/32a5c898e3bd7d3abf1b6f6dc5ef4a23c5d32d8f
元コミット内容
codereview: do not add defaultcc for private CLs
LGTM=r
R=r, 0xjnml, bradfitz, iant
CC=golang-codereviews
https://golang.org/cl/103070046
変更の背景
Goプロジェクトでは、コードの変更をレビューするためにRietveldベースのコードレビューシステムを使用しています。このシステムでは、変更リスト(CL)が作成され、レビュー担当者(reviewer)やCC(Carbon Copy)受信者が指定されます。defaultcc
は、特定のプロジェクトやチームにおいて、すべてのCLに自動的に追加されるデフォルトのCC受信者を指します。
このコミットの背景には、プライベートなCLの取り扱いに関する問題があったと考えられます。プライベートなCLは、公開されるべきではない、あるいは特定の限られた関係者のみがレビューすべき変更(例: セキュリティ修正、実験的な機能、内部的な議論など)のために使用されます。もし、このようなプライベートなCLに対してもdefaultcc
が自動的に追加されてしまうと、意図しない情報漏洩や、関係のない人々への通知が発生し、プライバシーの侵害やノイズの増加につながります。
この変更は、プライベートなCLの特性を尊重し、そのプライバシーを保護するために、defaultcc
の自動追加を抑制することを目的としています。
前提知識の解説
コードレビューシステム (Rietveld/Gerrit)
コードレビューシステムは、ソフトウェア開発において、開発者が書いたコードの変更を他の開発者が確認し、フィードバックを与えるためのツールです。Goプロジェクトでは、Googleが開発したRietveld(現在はGerritが主流)に似たシステムが使われています。
- Change List (CL): コードレビューシステムにおける変更の単位です。通常、一つの機能追加やバグ修正に対応する一連のコミットや変更を含みます。
- Reviewer (レビュー担当者): CLの内容を技術的に評価し、承認または修正を要求する責任を持つ開発者です。
- CC (Carbon Copy) 受信者: CLに関する通知(更新、コメントなど)を受け取るが、直接的なレビュー責任は持たない関係者です。メーリングリストや特定のチームメンバーが指定されることが多いです。
defaultcc
: プロジェクトやリポジトリの設定によって、すべての新しいCLに自動的に追加されるCC受信者のリストです。これは、特定のグループ(例: 全開発者メーリングリスト、セキュリティチーム)が常に変更を把握できるようにするために使用されます。- Private CLs (プライベートなCL): 通常の公開レビューフローに乗せるべきではない、あるいは特定の限られた関係者のみがアクセスすべきCLです。システムによっては、アクセス制御が厳しく設定され、特定のユーザーやグループのみが閲覧・コメントできるような機能が提供されます。
Pythonスクリプト codereview.py
Goプロジェクトのコードベースには、lib/codereview/codereview.py
というPythonスクリプトが存在します。これは、Goのコードレビューシステムと連携するためのクライアントサイドツールまたはユーティリティスクリプトであると推測されます。このスクリプトは、CLの作成、更新、メール通知の送信など、コードレビュープロセスに関連する様々な操作を自動化するために使用されます。
技術的詳細
このコミットは、lib/codereview/codereview.py
ファイル内の2つの箇所を変更することで、プライベートなCLに対するdefaultcc
の挙動を修正しています。変更の核心は、CLがプライベートであるかどうかを示すcl.private
というフラグの導入と利用です。
-
CommandLineCL
関数内の変更: この関数は、コマンドラインからCLを操作する際に使用されると考えられます。元のコードでは、defaultcc
が設定されていれば無条件にCLのCCリストに追加されていました。 変更後:if defaultcc:
からif defaultcc and not cl.private:
へ。 この変更により、defaultcc
が存在し、かつCLがプライベートではない場合にのみ、defaultcc
がCLのCCリストに追加されるようになります。cl.private
がTrue
の場合、defaultcc
は追加されません。 -
mail
関数内の変更: この関数は、CLに関するメール通知を送信する際に使用されると考えられます。元のコードでは、defaultcc
が設定されていない場合に「レビュー担当者がCLにリストされていません」というエラーを発生させていました。これは、レビュー担当者が明示的に指定されていない場合に、defaultcc
がフォールバックとして機能することを期待していたためと考えられます。 変更後:if not defaultcc:
からif not defaultcc or cl.private:
へ。 この変更により、defaultcc
が設定されていない場合でも、またはCLがプライベートである場合には、エラーが発生しなくなります。これは、プライベートなCLではdefaultcc
が不要であるか、あるいは意図的に設定されていない場合があるため、その場合に不必要なエラーを回避するための修正です。プライベートなCLでは、レビュー担当者が明示的に指定されていなくても、defaultcc
がないことが許容されるようになったことを意味します。
これらの変更により、cl.private
フラグがTrue
であるCLは、defaultcc
の自動追加の対象外となり、またdefaultcc
が設定されていないことによるエラーチェックからも除外されるようになります。
コアとなるコードの変更箇所
--- a/lib/codereview/codereview.py
+++ b/lib/codereview/codereview.py
@@ -846,7 +846,7 @@ def CommandLineCL(ui, repo, pats, opts, op="verb", defaultcc=None):
cl.reviewer = Add(cl.reviewer, SplitCommaSpace(opts.get('reviewer')))
if opts.get('cc'):
cl.cc = Add(cl.cc, SplitCommaSpace(opts.get('cc')))
- if defaultcc:
+ if defaultcc and not cl.private:
cl.cc = Add(cl.cc, defaultcc)
if cl.name == "new":
if opts.get('message'):
@@ -1845,7 +1845,7 @@ def mail(ui, repo, *pats, **opts):
# This makes sure that it appears in the
# codereview.appspot.com/user/defaultcc
# page, so that it doesn't get dropped on the floor.
- if not defaultcc:
+ if not defaultcc or cl.private:
raise hg_util.Abort("no reviewers listed in CL")
cl.cc = Sub(cl.cc, defaultcc)
cl.reviewer = defaultcc
コアとなるコードの解説
1. CommandLineCL
関数内の変更
- if defaultcc:
+ if defaultcc and not cl.private:
cl.cc = Add(cl.cc, defaultcc)
この変更は、CLのCCリストにdefaultcc
を追加する条件を修正しています。
- 変更前 (
if defaultcc:
):defaultcc
が設定されていれば、CLがプライベートであるかどうかにかかわらず、常にCCリストに追加されていました。 - 変更後 (
if defaultcc and not cl.private:
):defaultcc
が設定されており、かつ現在のCLがプライベートではない場合にのみ、defaultcc
がCCリストに追加されるようになります。これにより、プライベートなCLではdefaultcc
が自動的に追加されることがなくなります。
2. mail
関数内の変更
- if not defaultcc:
+ if not defaultcc or cl.private:
raise hg_util.Abort("no reviewers listed in CL")
この変更は、メール送信時のレビュー担当者チェックのロジックを修正しています。
- 変更前 (
if not defaultcc:
):defaultcc
が設定されていない場合、レビュー担当者がCLにリストされていないというエラー(hg_util.Abort
)が発生していました。これは、defaultcc
がレビュー担当者のフォールバックとして機能することを意図していたためです。 - 変更後 (
if not defaultcc or cl.private:
):defaultcc
が設定されていない場合、または現在のCLがプライベートである場合に、エラーが発生しなくなります。これにより、プライベートなCLでは、defaultcc
が設定されていなくてもエラーにならず、レビュープロセスを続行できるようになります。これは、プライベートなCLではdefaultcc
が不要であるか、あるいは意図的に設定されていない場合があるため、その場合に不必要なエラーを回避するための修正です。
これらの変更は、cl.private
という新しいフラグ(または既存のフラグの利用)に基づいて、defaultcc
の挙動を制御し、プライベートなCLのプライバシーと適切な通知フローを確保することを目的としています。
関連リンク
- Go Code Review Change List: https://golang.org/cl/103070046
参考にした情報源リンク
- 特になし(提供されたコミット情報と一般的なコードレビューシステムの知識に基づいています)。