[インデックス 11039] ファイルの概要
このコミットは、Go言語の初期のパッケージインストールツールである goinstall
のテストデータにおけるバグ修正です。具体的には、download_test.go
ファイル内のテストケースにおいて、Google Code上のSVNリポジトリを参照するURLのプロトコルを https
から http
へと変更し、テストが正しく動作するように修正しています。
コミット
commit 2c459f14e9b338fabbae3941ce8a84cee059fc4c
Author: Andrew Gerrand <adg@golang.org>
Date: Fri Jan 6 09:48:03 2012 +1100
goinstall: fix test data
R=gri
CC=golang-dev
https://golang.org/cl/5519048
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/2c459f14e9b338fabbae3941ce8a84cee059fc4c
元コミット内容
goinstall: fix test data
R=gri
CC=golang-dev
https://golang.org/cl/5519048
変更の背景
この変更は、goinstall
ツールが公開リポジトリ(特にGoogle Code上のSVNリポジトリ)を正しく検出・処理できるかを検証するテスト FindPublicRepoTests
が、誤ったURLプロトコルを使用していたために失敗していた問題を修正するために行われました。
当時のGoogle Codeのホスティング状況や、goinstall
がリポジトリをどのように解決していたかという文脈において、テストデータ内のURLが https
ではなく http
であるべきだったと考えられます。これは、テストが期待する動作と実際の環境(または goinstall
の実装)との間に不一致があったことを示唆しています。この修正により、テストデータが goinstall
の期待する動作に合致し、テストがパスするようになりました。
前提知識の解説
-
goinstall
:goinstall
は、Go言語の初期のパッケージ管理ツールです。現在のgo get
コマンドの前身にあたります。インターネット上のリポジトリからGoパッケージのソースコードを取得し、ビルドしてインストールする機能を提供していました。goinstall
は、Git、Mercurial (hg)、Subversion (svn) など、様々なバージョン管理システムをサポートしていました。 -
Google Code: Google Codeは、かつてGoogleが提供していたオープンソースプロジェクトのホスティングサービスです。多くのオープンソースプロジェクトがここでソースコードを公開し、IssueトラッカーやWikiなどの機能も利用できました。2016年にサービスを終了しています。このコミットが作成された2012年時点では、まだ活発に利用されていました。
-
Subversion (SVN): Subversionは、集中型バージョン管理システム(CVCS)の一つです。Gitが分散型であるのに対し、SVNは中央リポジトリにすべての履歴が保存され、開発者はそこからコードをチェックアウトして作業します。Google Codeでは、SVNリポジトリもホスティングされていました。
-
HTTPとHTTPS:
- HTTP (Hypertext Transfer Protocol): ウェブ上でデータを転送するためのプロトコルです。データは暗号化されずに送信されます。
- HTTPS (Hypertext Transfer Protocol Secure): HTTPにSSL/TLSプロトコルを組み合わせることで、通信を暗号化し、データの盗聴や改ざんを防ぐセキュアな通信プロトコルです。
このコミットでは、テストデータ内のURLのプロトコルが
https
からhttp
に変更されています。これは、テストが意図するリソースへのアクセスが、セキュアなHTTPSではなく、非セキュアなHTTPで行われるべきであったことを示しています。
-
テストデータ: ソフトウェア開発におけるテストデータとは、プログラムのテストを実行する際に使用される入力データのことです。このコミットでは、
goinstall
がリポジトリを検出する機能をテストするための、具体的なリポジトリURLがテストデータとして定義されていました。
技術的詳細
このコミットの技術的な核心は、src/cmd/goinstall/download_test.go
ファイル内の FindPublicRepoTests
というテストスライス(Go言語における配列のようなもの)の定義にあります。このテストスライスは、goinstall
が様々な公開リポジトリをどのように認識し、その情報を抽出するかを検証するためのものです。
変更された具体的な箇所は、code.google.com/p/repo
という架空のGoogle Codeリポジトリに対するSVNのURLです。元のコードでは、このURLが https://repo.googlecode.com/svn
と定義されていました。しかし、このコミットでは、これを http://repo.googlecode.com/svn
に変更しています。
この変更が意味するところは以下のいずれか、またはその組み合わせであると考えられます。
- テスト環境の制約: テストが実行される環境において、
https://repo.googlecode.com/svn
へのアクセスが何らかの理由でブロックされていたか、または証明書の問題などで接続が確立できなかった可能性があります。一方、http
であれば問題なくアクセスできたため、テストをパスさせるためにプロトコルを変更した。 goinstall
の挙動の修正:goinstall
自体が、特定の状況下でhttps
のSVNリポジトリを正しく扱えなかった、あるいはhttp
でのアクセスを期待していた可能性があります。この修正は、goinstall
の当時の実装がhttp
を介したSVNリポジトリの検出を想定していたことにテストデータを合わせるものです。- Google Codeの仕様変更または誤解: 当時、Google CodeのSVNリポジトリへのアクセスが、特定の条件下で
http
を介してのみ可能であったか、あるいは開発者がhttps
とhttp
のどちらが正しいアクセス方法であるかを誤解していた可能性があります。テストデータは、実際のアクセス方法に合わせる必要がありました。
いずれにせよ、この変更は goinstall
のリポジトリ検出機能のテストが、現実の環境や goinstall
の実装と整合性が取れていなかった点を修正し、テストの信頼性を向上させることを目的としています。
コアとなるコードの変更箇所
--- a/src/cmd/goinstall/download_test.go
+++ b/src/cmd/goinstall/download_test.go
@@ -31,7 +31,7 @@ var FindPublicRepoTests = []struct {
"code.google.com/p/repo/path/foo",
"svn",
"code.google.com/p/repo",
- "https://repo.googlecode.com/svn",
+ "http://repo.googlecode.com/svn",
&testTransport{
"https://code.google.com/p/repo/source/checkout",
`<tt id="checkoutcmd">svn checkout https://...`,
コアとなるコードの解説
変更は src/cmd/goinstall/download_test.go
ファイルの34行目で行われています。
FindPublicRepoTests
は、goinstall
が様々なリポジトリタイプ(この場合はSVN)をどのように処理するかをテストするための構造体のスライスです。各要素は、テスト対象のURL、バージョン管理システムの種類、リポジトリのルートパス、そしてリポジトリのURLなどを含んでいます。
変更された行は、"https://repo.googlecode.com/svn"
から "http://repo.googlecode.com/svn"
への修正です。
これは、FindPublicRepoTests
のテストケースの一つで、goinstall
が code.google.com/p/repo
というGoogle Code上のSVNリポジトリを正しく認識し、そのSVNリポジトリのベースURLとして "http://repo.googlecode.com/svn"
を抽出できることを検証するためのものです。
この修正により、テストデータが goinstall
の実際の動作(または当時のGoogle CodeのSVNリポジトリへのアクセス方法)と一致するようになり、テストが期待通りにパスするようになりました。これは、テストの正確性を保ち、goinstall
のリポジトリ検出ロジックが正しく機能していることを保証するために重要な変更です。
関連リンク
- Go Code Review ツール (Gerrit) の変更リスト: https://golang.org/cl/5519048
参考にした情報源リンク
- Go言語の公式ドキュメント (当時の
goinstall
やパッケージ管理に関する情報): https://golang.org/ (現在のGo公式サイト) - Google Code (サービス終了済みのため、アーカイブ情報など): https://code.google.com/ (現在はGoogle Developersにリダイレクト)
- Subversion (SVN) 公式サイト: https://subversion.apache.org/
- HTTPとHTTPSに関する一般的な情報源 (例: MDN Web Docsなど)