[インデックス 10658] ファイルの概要
このコミットは、Go言語のダッシュボードシステムにおけるビルダ(gobuilder
)の動作を改善し、Goツリーのビルド後に外部パッケージをgoinstall
する機能を追加します。具体的には、misc/dashboard/builder
ディレクトリ内のexec.go
、http.go
、main.go
、package.go
の4つのファイルが変更されています。
コミット
commit be587a4d5366ea1d53967dfdbd7539b6168c6af2
Author: Andrew Gerrand <adg@golang.org>
Date: Thu Dec 8 10:31:06 2011 +1100
gobuilder: goinstall packages after building go tree
R=rsc
CC=golang-dev
https://golang.org/cl/5450100
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/be587a4d5366ea1d53967dfdbd7539b6168c6af2
元コミット内容
gobuilder: goinstall packages after building go tree
このコミットは、GoビルダがGo言語のソースツリーをビルドした後、追加のパッケージをgoinstall
コマンドでインストールするように変更します。
変更の背景
Go言語のビルドシステムには、継続的インテグレーション(CI)の一部として、様々な環境でGoのソースツリー自体をビルドし、その健全性を確認するgobuilder
が存在します。しかし、Goの標準ライブラリだけでなく、外部の重要なパッケージもGoの変更によって影響を受ける可能性があります。
このコミット以前は、gobuilder
は主にGoツリー自体のビルドに焦点を当てていました。しかし、Goツリーの変更が外部パッケージに与える影響を早期に検知するためには、Goツリーのビルドが成功した後に、これらの外部パッケージもビルド・インストールしてテストすることが重要になります。
この変更の背景には、Goエコシステム全体の安定性を向上させるという目的があります。Goツリーの変更が外部パッケージのビルドを壊すような事態を未然に防ぐため、gobuilder
の検証範囲を拡張する必要がありました。これにより、開発者はGoツリーの変更が外部パッケージに与える影響をより迅速に把握し、問題があれば早期に修正できるようになります。
前提知識の解説
- Go Builder (gobuilder): Go言語プロジェクトにおける継続的インテグレーション(CI)システムの一部です。様々なオペレーティングシステムやアーキテクチャの組み合わせでGoのソースコードを自動的にビルドし、テストを実行することで、Go言語の安定性と互換性を保証します。ビルド結果はGoダッシュボードに報告されます。
- Go Dashboard: Go言語プロジェクトの公式ウェブサイトの一部で、
gobuilder
からのビルド結果を集約し、表示するダッシュボードです。各コミットに対するビルドの成功・失敗、テスト結果などを一目で確認できます。 goinstall
コマンド: Go 1.0以前に存在したコマンドで、Goパッケージをリモートリポジトリから取得し、ビルドしてインストールするために使用されました。Go 1.0以降はgo get
コマンドに置き換えられましたが、このコミットが作成された2011年当時はまだgoinstall
が使われていました。goinstall
は、指定されたパッケージとその依存関係を再帰的にダウンロードし、$GOROOT/pkg
または$GOPATH/pkg
にコンパイル済みバイナリを配置します。- Mercurial (hg): Go言語プロジェクトが初期にバージョン管理システムとして使用していた分散型バージョン管理システムです。Gitと同様に、リポジトリのクローン、コミット、ブランチ、マージなどの操作が可能です。このコミットでは、パッケージの特定のハッシュ(リビジョン)に更新するために
hg update
コマンドが使用されています。 GOROOT
: Go言語のインストールディレクトリを指す環境変数です。Goの標準ライブラリやツールがここに配置されます。GOPATH
: Goのワークスペースディレクトリを指す環境変数です。ユーザーが開発するGoプロジェクトのソースコード、パッケージ、バイナリがここに配置されます。
技術的詳細
このコミットの主要な変更点は、gobuilder
がGoツリーのビルドに加えて、特定の外部パッケージのgoinstall
を実行するように拡張されたことです。
-
main.go
の変更:Builder.buildHash
関数内で、Goツリーのビルドが成功した後(status == 0
の場合)に、新しく追加されたb.buildPackages(filepath.Join(workpath, "go"), hash)
が呼び出されるようになりました。これにより、Goツリーのビルドが成功した後に外部パッケージのビルドプロセスが開始されます。- 既存の
b.buildPackages
関数はb.buildExternalPackages
にリネームされ、Goツリーのビルドとは別の、リリースビルドに関連する処理を行うようになりました。これは、新しいbuildPackages
関数との名前の衝突を避けるためです。 recordResult
関数の呼び出しが変更され、パッケージパス、Goハッシュ、成功/失敗ステータスなどの詳細情報がダッシュボードに送信されるようになりました。
-
新しい
buildPackages
関数の追加 (main.go
内):- この関数は、
dashboardPackages()
(ダッシュボードで監視対象となっている外部パッケージのリストを返す関数)からパッケージのリストを取得します。 - 各パッケージについて、
b.todo(pkg, goHash)
を呼び出して、そのパッケージの最新のビルド対象ハッシュを取得します。これにより、ダッシュボードが指定する特定のバージョンのパッケージをビルドできます。 - 取得したハッシュに基づいて、
b.goinstall(goRoot, pkg, hash)
を呼び出し、実際にパッケージの取得、更新、ビルドを行います。 - ビルド結果(成功/失敗、ログ)は
b.recordResult
を通じてダッシュボードに報告されます。
- この関数は、
-
新しい
goinstall
関数の追加 (main.go
内):- この関数は、指定された
GOROOT
、パッケージパス、ハッシュを使用して、外部パッケージをgoinstall
するロジックをカプセル化します。 - まず、
goinstall
コマンドを-dashboard=false -install=false
オプション付きで実行し、パッケージとその依存関係をフェッチします。-install=false
は、この段階ではまだビルドを行わず、ソースコードの取得のみを行うことを意味します。 - 次に、
filepath.Join(goRoot, "src/pkg", pkg)
で計算されたパッケージのソースディレクトリに移動し、hg update hash
を実行して、指定されたハッシュ(リビジョン)にソースコードを更新します。これにより、特定の時点のパッケージコードをビルドできます。 - 最後に、再度
goinstall
コマンドを-dashboard=false
オプション付きで実行し、パッケージをビルドします。
- この関数は、指定された
-
http.go
の変更:todo
関数とrecordResult
関数のシグネチャが変更され、パッケージパス(pkg
)とGoツリーのハッシュ(goHash
)を引数として受け取るようになりました。これにより、ダッシュボードとの通信において、どのGoツリーのバージョンでどのパッケージがビルドされたか、といったより詳細な情報をやり取りできるようになります。url.Values
にpackagePath
とgoHash
が追加され、ダッシュボードへのリクエストに含まれるようになりました。
-
exec.go
の変更:runLog
関数で、エラーが発生した場合の戻り値がreturn b.String(), 0, err
に変更されました。これは、エラーが発生した際にnil
ではなく実際のエラーを返すように修正されたもので、より正確なエラーハンドリングを可能にします。
これらの変更により、gobuilder
はGoツリーのビルドだけでなく、そのGoツリーのバージョンで外部パッケージが正しくビルドできるかどうかも検証するようになり、Go言語全体の品質保証プロセスが強化されました。
コアとなるコードの変更箇所
このコミットのコアとなる変更は、主にmisc/dashboard/builder/main.go
ファイルに集中しています。
-
main.go
におけるbuildHash
関数の変更:--- a/misc/dashboard/builder/main.go +++ b/misc/dashboard/builder/main.go @@ -305,19 +304,22 @@ func (b *Builder) buildHash(hash string) (err error) { if status != 0 { // record failure - return b.recordResult(buildLog, hash) + return b.recordResult(false, "", hash, "", buildLog) } // record success - if err = b.recordResult("", hash); err != nil { + if err = b.recordResult(true, "", hash, "", ""); err != nil { return fmt.Errorf("recordResult: %s", err) } + // build goinstallable packages + b.buildPackages(filepath.Join(workpath, "go"), hash) + // finish here if codeUsername and codePassword aren't set if b.codeUsername == "" || b.codePassword == "" || !*buildRelease { return }
Goツリーのビルドが成功した後(
status != 0
のブロックを抜けた後)に、b.buildPackages
が呼び出されている点が重要です。 -
main.go
における新しいbuildPackages
関数の追加:func (b *Builder) buildPackages(goRoot, goHash string) { for _, pkg := range dashboardPackages() { // get the latest todo for this package hash, err := b.todo(pkg, goHash) if err != nil { log.Printf("buildPackages %s: %v", pkg, err) continue } if hash == "" { continue } // goinstall the package if *verbose { log.Printf("buildPackages %s: installing %q", pkg, hash) } buildLog, err := b.goinstall(goRoot, pkg, hash) ok := buildLog == "" if err != nil { ok = false log.Printf("buildPackages %s: %v", pkg, err) } // record the result err = b.recordResult(ok, pkg, hash, goHash, buildLog) if err != nil { log.Printf("buildPackages %s: %v", pkg, err) } } }
この関数が外部パッケージのビルドと結果の記録をオーケストレーションしています。
-
main.go
における新しいgoinstall
関数の追加:func (b *Builder) goinstall(goRoot, pkg, hash string) (string, error) { bin := filepath.Join(goRoot, "bin/goinstall") env := append(b.envv(), "GOROOT="+goRoot) // fetch package and dependencies log, status, err := runLog(env, "", goRoot, bin, "-dashboard=false", "-install=false", pkg) if err != nil || status != 0 { return log, err } // hg update to the specified hash pkgPath := filepath.Join(goRoot, "src/pkg", pkg) if err := run(nil, pkgPath, "hg", "update", hash); err != nil { return "", err } // build the package log, _, err = runLog(env, "", goRoot, bin, "-dashboard=false", pkg) return log, err }
この関数が
goinstall
コマンドの実行とMercurialによるバージョン管理を直接扱っています。
コアとなるコードの解説
-
buildHash
関数内のb.buildPackages(...)
呼び出し: Goツリー自体のビルドが成功した直後に、この新しい呼び出しが挿入されています。これは、Goツリーの変更が外部パッケージに与える影響を検証するための重要なフックとなります。filepath.Join(workpath, "go")
は、ビルドされたGoツリーのルートディレクトリを指し、hash
はビルドされたGoツリーのコミットハッシュです。これらの情報が、外部パッケージのビルド時にGOROOT
の設定やダッシュボードへの結果報告に利用されます。 -
buildPackages
関数: この関数は、Goダッシュボードが監視している外部パッケージ(dashboardPackages()
で取得)を一つずつ処理します。b.todo(pkg, goHash)
: ダッシュボードに問い合わせて、現在処理中のGoツリーのバージョン(goHash
)に対して、この特定の外部パッケージ(pkg
)のどのリビジョン(hash
)をビルドすべきかを取得します。これにより、ダッシュボードがビルドの優先順位や特定のパッケージバージョンを指定できるようになります。b.goinstall(goRoot, pkg, hash)
: 取得したパッケージのリビジョン情報を使って、実際にパッケージのgoinstall
を実行します。この関数が、パッケージのソースコードの取得、指定されたリビジョンへの更新、そしてビルドという一連のプロセスを担います。b.recordResult(ok, pkg, hash, goHash, buildLog)
:goinstall
の結果(成功/失敗、ビルドログ)をダッシュボードに報告します。これにより、ダッシュボードはGoツリーのビルド結果だけでなく、そのGoツリーで外部パッケージが正しくビルドできたかどうかの情報も保持し、表示できるようになります。
-
goinstall
関数: この関数は、goinstall
コマンドとMercurialコマンドを組み合わせて、外部パッケージのビルドプロセスを自動化します。- パッケージのフェッチ: 最初の
runLog
呼び出しで、goinstall -dashboard=false -install=false <pkg>
を実行します。これにより、パッケージのソースコードとその依存関係がダウンロードされますが、まだコンパイルは行われません。-install=false
が重要なポイントで、これによりソースコードの取得のみが行われます。 - 指定リビジョンへの更新:
hg update hash
コマンドを実行することで、ダウンロードしたパッケージのソースコードを、ダッシュボードが指定した特定のリビジョン(hash
)に更新します。これは、Goツリーの特定のバージョンと互換性のあるパッケージのバージョンを正確にテストするために不可欠です。 - パッケージのビルド: 2回目の
runLog
呼び出しで、goinstall -dashboard=false <pkg>
を実行します。これにより、指定されたリビジョンに更新されたパッケージが実際にビルドされ、インストールされます。
- パッケージのフェッチ: 最初の
これらの変更により、gobuilder
はGoツリーのビルドと外部パッケージのビルドを連携させ、Go言語の変更がエコシステム全体に与える影響をより包括的に検証できるようになりました。
関連リンク
- Go CL 5450100: https://golang.org/cl/5450100 (このコミットに対応するGoのコードレビューシステム上のチェンジリスト)
参考にした情報源リンク
- Go言語の公式ドキュメント (当時の
goinstall
やgobuilder
に関する情報): - Mercurialの公式ドキュメント:
- Go Dashboard (現在のGo Builderの状態を確認できる):
- Go 1.0 Release Notes (goinstallからgo getへの移行に関する情報):
- https://go.dev/doc/go1# [インデックス 10658] ファイルの概要
このコミットは、Go言語のダッシュボードシステムにおけるビルダ(gobuilder
)の動作を改善し、Goツリーのビルド後に外部パッケージをgoinstall
する機能を追加します。具体的には、misc/dashboard/builder
ディレクトリ内のexec.go
、http.go
、main.go
、package.go
の4つのファイルが変更されています。
コミット
commit be587a4d5366ea1d53967dfdbd7539b6168c6af2
Author: Andrew Gerrand <adg@golang.org>
Date: Thu Dec 8 10:31:06 2011 +1100
gobuilder: goinstall packages after building go tree
R=rsc
CC=golang-dev
https://golang.org/cl/5450100
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/be587a4d5366ea1d53967dfdbd7539b6168c6af2
元コミット内容
gobuilder: goinstall packages after building go tree
このコミットは、GoビルダがGo言語のソースツリーをビルドした後、追加のパッケージをgoinstall
コマンドでインストールするように変更します。
変更の背景
Go言語のビルドシステムには、継続的インテグレーション(CI)の一部として、様々な環境でGoのソースツリー自体をビルドし、その健全性を確認するgobuilder
が存在します。しかし、Goの標準ライブラリだけでなく、外部の重要なパッケージもGoの変更によって影響を受ける可能性があります。
このコミット以前は、gobuilder
は主にGoツリー自体のビルドに焦点を当てていました。しかし、Goツリーの変更が外部パッケージに与える影響を早期に検知するためには、Goツリーのビルドが成功した後に、これらの外部パッケージもビルド・インストールしてテストすることが重要になります。
この変更の背景には、Goエコシステム全体の安定性を向上させるという目的があります。Goツリーの変更が外部パッケージのビルドを壊すような事態を未然に防ぐため、gobuilder
の検証範囲を拡張する必要がありました。これにより、開発者はGoツリーの変更が外部パッケージに与える影響をより迅速に把握し、問題があれば早期に修正できるようになります。
前提知識の解説
- Go Builder (gobuilder): Go言語プロジェクトにおける継続的インテグレーション(CI)システムの一部です。様々なオペレーティングシステムやアーキテクチャの組み合わせでGoのソースコードを自動的にビルドし、テストを実行することで、Go言語の安定性と互換性を保証します。ビルド結果はGoダッシュボードに報告されます。
- Go Dashboard: Go言語プロジェクトの公式ウェブサイトの一部で、
gobuilder
からのビルド結果を集約し、表示するダッシュボードです。各コミットに対するビルドの成功・失敗、テスト結果などを一目で確認できます。 goinstall
コマンド: Go 1.0以前に存在したコマンドで、Goパッケージをリモートリポジトリから取得し、ビルドしてインストールするために使用されました。Go 1.0以降はgo get
コマンドに置き換えられましたが、このコミットが作成された2011年当時はまだgoinstall
が使われていました。goinstall
は、指定されたパッケージとその依存関係を再帰的にダウンロードし、$GOROOT/pkg
または$GOPATH/pkg
にコンパイル済みバイナリを配置します。- Mercurial (hg): Go言語プロジェクトが初期にバージョン管理システムとして使用していた分散型バージョン管理システムです。Gitと同様に、リポジトリのクローン、コミット、ブランチ、マージなどの操作が可能です。このコミットでは、パッケージの特定のハッシュ(リビジョン)に更新するために
hg update
コマンドが使用されています。 GOROOT
: Go言語のインストールディレクトリを指す環境変数です。Goの標準ライブラリやツールがここに配置されます。GOPATH
: Goのワークスペースディレクトリを指す環境変数です。ユーザーが開発するGoプロジェクトのソースコード、パッケージ、バイナリがここに配置されます。
技術的詳細
このコミットの主要な変更点は、gobuilder
がGoツリーのビルドに加えて、特定の外部パッケージのgoinstall
を実行するように拡張されたことです。
-
main.go
の変更:Builder.buildHash
関数内で、Goツリーのビルドが成功した後(status == 0
の場合)に、新しく追加されたb.buildPackages(filepath.Join(workpath, "go"), hash)
が呼び出されるようになりました。これにより、Goツリーのビルドが成功した後に外部パッケージのビルドプロセスが開始されます。- 既存の
b.buildPackages
関数はb.buildExternalPackages
にリネームされ、Goツリーのビルドとは別の、リリースビルドに関連する処理を行うようになりました。これは、新しいbuildPackages
関数との名前の衝突を避けるためです。 recordResult
関数の呼び出しが変更され、パッケージパス、Goハッシュ、成功/失敗ステータスなどの詳細情報がダッシュボードに送信されるようになりました。
-
新しい
buildPackages
関数の追加 (main.go
内):- この関数は、
dashboardPackages()
(ダッシュボードで監視対象となっている外部パッケージのリストを返す関数)からパッケージのリストを取得します。 - 各パッケージについて、
b.todo(pkg, goHash)
を呼び出して、そのパッケージの最新のビルド対象ハッシュを取得します。これにより、ダッシュボードが指定する特定のバージョンのパッケージをビルドできます。 - 取得したハッシュに基づいて、
b.goinstall(goRoot, pkg, hash)
を呼び出し、実際にパッケージの取得、更新、ビルドを行います。 - ビルド結果(成功/失敗、ログ)は
b.recordResult
を通じてダッシュボードに報告されます。
- この関数は、
-
新しい
goinstall
関数の追加 (main.go
内):- この関数は、指定された
GOROOT
、パッケージパス、ハッシュを使用して、外部パッケージをgoinstall
するロジックをカプセル化します。 - まず、
goinstall
コマンドを-dashboard=false -install=false
オプション付きで実行し、パッケージとその依存関係をフェッチします。-install=false
は、この段階ではまだビルドを行わず、ソースコードの取得のみを行うことを意味します。 - 次に、
filepath.Join(goRoot, "src/pkg", pkg)
で計算されたパッケージのソースディレクトリに移動し、hg update hash
を実行して、指定されたハッシュ(リビジョン)にソースコードを更新します。これにより、特定の時点のパッケージコードをビルドできます。 - 最後に、再度
goinstall
コマンドを-dashboard=false
オプション付きで実行し、パッケージをビルドします。
- この関数は、指定された
-
http.go
の変更:todo
関数とrecordResult
関数のシグネチャが変更され、パッケージパス(pkg
)とGoツリーのハッシュ(goHash
)を引数として受け取るようになりました。これにより、ダッシュボードとの通信において、どのGoツリーのバージョンでどのパッケージがビルドされたか、といったより詳細な情報をやり取りできるようになります。url.Values
にpackagePath
とgoHash
が追加され、ダッシュボードへのリクエストに含まれるようになりました。
-
exec.go
の変更:runLog
関数で、エラーが発生した場合の戻り値がreturn b.String(), 0, err
に変更されました。これは、エラーが発生した際にnil
ではなく実際のエラーを返すように修正されたもので、より正確なエラーハンドリングを可能にします。
これらの変更により、gobuilder
はGoツリーのビルドだけでなく、そのGoツリーのバージョンで外部パッケージが正しくビルドできるかどうかも検証するようになり、Go言語全体の品質保証プロセスが強化されました。
コアとなるコードの変更箇所
このコミットのコアとなる変更は、主にmisc/dashboard/builder/main.go
ファイルに集中しています。
-
main.go
におけるbuildHash
関数の変更:--- a/misc/dashboard/builder/main.go +++ b/misc/dashboard/builder/main.go @@ -305,19 +304,22 @@ func (b *Builder) buildHash(hash string) (err error) { if status != 0 { // record failure - return b.recordResult(buildLog, hash) + return b.recordResult(false, "", hash, "", buildLog) } // record success - if err = b.recordResult("", hash); err != nil { + if err = b.recordResult(true, "", hash, "", ""); err != nil { return fmt.Errorf("recordResult: %s", err) } + // build goinstallable packages + b.buildPackages(filepath.Join(workpath, "go"), hash) + // finish here if codeUsername and codePassword aren't set if b.codeUsername == "" || b.codePassword == "" || !*buildRelease { return }
Goツリーのビルドが成功した後(
status != 0
のブロックを抜けた後)に、b.buildPackages
が呼び出されている点が重要です。 -
main.go
における新しいbuildPackages
関数の追加:func (b *Builder) buildPackages(goRoot, goHash string) { for _, pkg := range dashboardPackages() { // get the latest todo for this package hash, err := b.todo(pkg, goHash) if err != nil { log.Printf("buildPackages %s: %v", pkg, err) continue } if hash == "" { continue } // goinstall the package if *verbose { log.Printf("buildPackages %s: installing %q", pkg, hash) } buildLog, err := b.goinstall(goRoot, pkg, hash) ok := buildLog == "" if err != nil { ok = false log.Printf("buildPackages %s: %v", pkg, err) } // record the result err = b.recordResult(ok, pkg, hash, goHash, buildLog) if err != nil { log.Printf("buildPackages %s: %v", pkg, err) } } }
この関数が外部パッケージのビルドと結果の記録をオーケストレーションしています。
-
main.go
における新しいgoinstall
関数の追加:func (b *Builder) goinstall(goRoot, pkg, hash string) (string, error) { bin := filepath.Join(goRoot, "bin/goinstall") env := append(b.envv(), "GOROOT="+goRoot) // fetch package and dependencies log, status, err := runLog(env, "", goRoot, bin, "-dashboard=false", "-install=false", pkg) if err != nil || status != 0 { return log, err } // hg update to the specified hash pkgPath := filepath.Join(goRoot, "src/pkg", pkg) if err := run(nil, pkgPath, "hg", "update", hash); err != nil { return "", err } // build the package log, _, err = runLog(env, "", goRoot, bin, "-dashboard=false", pkg) return log, err }
この関数が
goinstall
コマンドの実行とMercurialによるバージョン管理を直接扱っています。
コアとなるコードの解説
-
buildHash
関数内のb.buildPackages(...)
呼び出し: Goツリー自体のビルドが成功した直後に、この新しい呼び出しが挿入されています。これは、Goツリーの変更が外部パッケージに与える影響を検証するための重要なフックとなります。filepath.Join(workpath, "go")
は、ビルドされたGoツリーのルートディレクトリを指し、hash
はビルドされたGoツリーのコミットハッシュです。これらの情報が、外部パッケージのビルド時にGOROOT
の設定やダッシュボードへの結果報告に利用されます。 -
buildPackages
関数: この関数は、Goダッシュボードが監視している外部パッケージ(dashboardPackages()
で取得)を一つずつ処理します。b.todo(pkg, goHash)
: ダッシュボードに問い合わせて、現在処理中のGoツリーのバージョン(goHash
)に対して、この特定の外部パッケージ(pkg
)のどのリビジョン(hash
)をビルドすべきかを取得します。これにより、ダッシュボードがビルドの優先順位や特定のパッケージバージョンを指定できるようになります。b.goinstall(goRoot, pkg, hash)
: 取得したパッケージのリビジョン情報を使って、実際にパッケージのgoinstall
を実行します。この関数が、パッケージのソースコードの取得、指定されたリビジョンへの更新、そしてビルドという一連のプロセスを担います。b.recordResult(ok, pkg, hash, goHash, buildLog)
:goinstall
の結果(成功/失敗、ビルドログ)をダッシュボードに報告します。これにより、ダッシュボードはGoツリーのビルド結果だけでなく、そのGoツリーで外部パッケージが正しくビルドできたかどうかの情報も保持し、表示できるようになります。
-
goinstall
関数: この関数は、goinstall
コマンドとMercurialコマンドを組み合わせて、外部パッケージのビルドプロセスを自動化します。- パッケージのフェッチ: 最初の
runLog
呼び出しで、goinstall -dashboard=false -install=false <pkg>
を実行します。これにより、パッケージのソースコードとその依存関係がダウンロードされますが、まだコンパイルは行われません。-install=false
が重要なポイントで、これによりソースコードの取得のみが行われます。 - 指定リビジョンへの更新:
hg update hash
コマンドを実行することで、ダウンロードしたパッケージのソースコードを、ダッシュボードが指定した特定のリビジョン(hash
)に更新します。これは、Goツリーの特定のバージョンと互換性のあるパッケージのバージョンを正確にテストするために不可欠です。 - パッケージのビルド: 2回目の
runLog
呼び出しで、goinstall -dashboard=false <pkg>
を実行します。これにより、指定されたリビジョンに更新されたパッケージが実際にビルドされ、インストールされます。
- パッケージのフェッチ: 最初の
これらの変更により、gobuilder
はGoツリーのビルドと外部パッケージのビルドを連携させ、Go言語の変更がエコシステム全体に与える影響をより包括的に検証できるようになりました。
関連リンク
- Go CL 5450100: https://golang.org/cl/5450100 (このコミットに対応するGoのコードレビューシステム上のチェンジリスト)
参考にした情報源リンク
- Go言語の公式ドキュメント (当時の
goinstall
やgobuilder
に関する情報): - Mercurialの公式ドキュメント:
- Go Dashboard (現在のGo Builderの状態を確認できる):
- Go 1.0 Release Notes (goinstallからgo getへの移行に関する情報):