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

[インデックス 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 に変更しています。

この変更が意味するところは以下のいずれか、またはその組み合わせであると考えられます。

  1. テスト環境の制約: テストが実行される環境において、https://repo.googlecode.com/svn へのアクセスが何らかの理由でブロックされていたか、または証明書の問題などで接続が確立できなかった可能性があります。一方、http であれば問題なくアクセスできたため、テストをパスさせるためにプロトコルを変更した。
  2. goinstall の挙動の修正: goinstall 自体が、特定の状況下で https のSVNリポジトリを正しく扱えなかった、あるいは http でのアクセスを期待していた可能性があります。この修正は、goinstall の当時の実装が http を介したSVNリポジトリの検出を想定していたことにテストデータを合わせるものです。
  3. Google Codeの仕様変更または誤解: 当時、Google CodeのSVNリポジトリへのアクセスが、特定の条件下で http を介してのみ可能であったか、あるいは開発者が httpshttp のどちらが正しいアクセス方法であるかを誤解していた可能性があります。テストデータは、実際のアクセス方法に合わせる必要がありました。

いずれにせよ、この変更は 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 のテストケースの一つで、goinstallcode.google.com/p/repo というGoogle Code上のSVNリポジトリを正しく認識し、そのSVNリポジトリのベースURLとして "http://repo.googlecode.com/svn" を抽出できることを検証するためのものです。

この修正により、テストデータが goinstall の実際の動作(または当時のGoogle CodeのSVNリポジトリへのアクセス方法)と一致するようになり、テストが期待通りにパスするようになりました。これは、テストの正確性を保ち、goinstall のリポジトリ検出ロジックが正しく機能していることを保証するために重要な変更です。

関連リンク

参考にした情報源リンク

  • 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など)