Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 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というフラグの導入と利用です。

  1. CommandLineCL関数内の変更: この関数は、コマンドラインからCLを操作する際に使用されると考えられます。元のコードでは、defaultccが設定されていれば無条件にCLのCCリストに追加されていました。 変更後: if defaultcc: から if defaultcc and not cl.private: へ。 この変更により、defaultccが存在し、かつCLがプライベートではない場合にのみ、defaultccがCLのCCリストに追加されるようになります。cl.privateTrueの場合、defaultccは追加されません。

  2. 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のプライバシーと適切な通知フローを確保することを目的としています。

関連リンク

参考にした情報源リンク

  • 特になし(提供されたコミット情報と一般的なコードレビューシステムの知識に基づいています)。