[インデックス 13876] ファイルの概要
このコミットは、Go言語のWindowsビルドスクリプトである src/all.bat における dist banner コマンドの実行ロジックを修正するものです。具体的には、dist banner が GOROOT/bin を PATH に追加するよう提案する際に、正しい PATH 環境変数を参照できるように、PATH の復元処理のタイミングを早めています。
コミット
- コミットハッシュ:
2e7aaeddc4498788fe98bb9052af67894566ee5d - 作者: Shenghou Ma minux.ma@gmail.com
- コミット日時: 2012年9月20日 木曜日 00:58:34 +0800
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/2e7aaeddc4498788fe98bb9052af67894566ee5d
元コミット内容
src/all.bat: fix banner
we need to restore %PATH% before calling "dist banner", so that
it could suggest the user to add %GOROOT%/bin to %PATH% if necessary.
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/6525049
変更の背景
Go言語のビルドプロセスにおいて、src/all.bat はWindows環境でのビルドとテストを実行するための主要なバッチスクリプトです。このスクリプトは、ビルド中に一時的に PATH 環境変数を変更することがあります。ビルドの最後に go tool dist banner コマンドが実行されますが、このコマンドはユーザーの PATH 環境変数の設定をチェックし、必要に応じて GOROOT/bin ディレクトリを PATH に追加するよう提案する機能を持っています。
しかし、元のスクリプトでは、PATH 環境変数が一時的に変更された状態のまま go tool dist banner が実行されていました。このため、dist banner が参照する PATH がユーザーの本来の環境設定を反映しておらず、誤った提案をしてしまう可能性がありました。例えば、GOROOT/bin が既に PATH に含まれているにもかかわらず、含まれていないと判断して追加を促してしまう、といった問題が発生し得ました。
このコミットは、dist banner が正確な PATH 情報に基づいて適切な提案を行えるように、dist banner の実行前に PATH 環境変数を元の状態に復元する必要があるという認識に基づいて行われました。
前提知識の解説
PATH環境変数: オペレーティングシステムが実行可能ファイル(コマンド)を探す際に参照するディレクトリのリストです。Windowsではセミコロン (;) で区切られたパスの文字列として表現されます。コマンドプロンプトでecho %PATH%と入力すると現在の設定を確認できます。src/all.bat: Go言語のソースコードリポジトリに含まれる、Windows環境向けのビルドおよびテスト実行用バッチスクリプトです。Goのツールチェインをビルドし、テストを実行する一連の処理を自動化します。go tool dist banner: Go言語のビルドシステム (distツール) の一部であるサブコマンドです。Goのインストールが正しく行われているか、特にGOROOT/binがPATHに含まれているかなどをチェックし、ユーザーに情報や提案を表示します。GOROOT: Go言語のインストールディレクトリのルートパスを示す環境変数です。例えば、GoがC:\Goにインストールされている場合、GOROOTはC:\Goとなります。GOROOT/binにはgoコマンドなどの実行可能ファイルが格納されています。%OLDPATH%:all.batスクリプト内で、スクリプト実行前の元のPATH環境変数の値を一時的に保存するために使用される変数です。スクリプトがPATHを変更する前に、この変数に元の値を格納しておき、後で復元するために利用します。%GOTOOLDIR%: Goのツールが配置されているディレクトリを示す変数です。go tool dist bannerのように、go toolコマンドで実行されるツールは、このディレクトリから実行されます。
技術的詳細
src/all.bat スクリプトは、ビルドプロセス中に PATH 環境変数を一時的に変更します。これは、ビルドに必要な特定のツールやコンパイラが PATH に含まれるようにするためです。スクリプトの冒頭で、現在の PATH の値を %OLDPATH% という変数に保存しています。
set OLDPATH=%PATH%
そして、ビルドとテストの実行後、スクリプトの終了処理の直前で、元の PATH を復元する行があります。
set PATH=%OLDPATH%
このコミットが行われる前は、go tool dist banner コマンドの呼び出しが set PATH=%OLDPATH% の前に配置されていました。
go tool dist banner
set PATH=%OLDPATH%
この順序では、go tool dist banner が実行される時点で PATH 環境変数はスクリプトによって変更された状態のままであり、ユーザーの本来の PATH 設定を反映していませんでした。
今回の修正では、go tool dist banner の呼び出しを set PATH=%OLDPATH% の後に移動させました。
set PATH=%OLDPATH%
%GOTOOLDIR%/dist banner
これにより、go tool dist banner が実行される際には、PATH 環境変数がスクリプト実行前の元の状態に復元されているため、dist banner はユーザーの実際の環境設定に基づいて GOROOT/bin の PATH への追加に関する正確な提案を行うことができるようになりました。
また、go tool dist banner の呼び出しが %GOTOOLDIR%/dist banner に変更されています。これは、go tool コマンドが内部的に %GOTOOLDIR% を使用してツールを見つけるため、より直接的な呼び出し方であり、意図を明確にするための変更と考えられます。機能的な違いはほとんどありませんが、スクリプトの堅牢性を高める可能性があります。
コアとなるコードの変更箇所
--- a/src/all.bat
+++ b/src/all.bat
@@ -16,8 +16,11 @@ call make.bat --no-banner --no-local
if %GOBUILDFAIL%==1 goto end
call run.bat --no-rebuild --no-local
if %GOBUILDFAIL%==1 goto end
-go tool dist banner
+:: we must restore %PATH% before running "dist banner" so that the latter
+:: can get the original %PATH% and give suggestion to add %GOROOT%/bin
+:: to %PATH% if necessary.
set PATH=%OLDPATH%\
+%GOTOOLDIR%/dist banner
\n :end
if x%GOBUILDEXIT%==x1 exit %GOBUILDFAIL%\
コアとなるコードの解説
変更された行は以下の通りです。
-
-go tool dist banner- この行は削除されました。これは、
dist bannerの実行タイミングが不適切であったためです。
- この行は削除されました。これは、
-
+:: we must restore %PATH% before running "dist banner" so that the latter+:: can get the original %PATH% and give suggestion to add %GOROOT%/bin+:: to %PATH% if necessary.- これは追加されたコメント行です。変更の意図と理由を明確に説明しています。
dist bannerが元のPATHを参照できるように、PATHを復元する必要があることを示しています。
- これは追加されたコメント行です。変更の意図と理由を明確に説明しています。
-
set PATH=%OLDPATH%\- この行は変更されていませんが、その位置が重要です。この行は、スクリプトによって一時的に変更された
PATH環境変数を、スクリプト実行前の元の状態に復元します。
- この行は変更されていませんが、その位置が重要です。この行は、スクリプトによって一時的に変更された
-
+%GOTOOLDIR%/dist banner- この行が新しく追加されました。
set PATH=%OLDPATH%の直後に配置されることで、dist bannerコマンドが実行される際には、PATH環境変数が既に元の状態に復元されています。これにより、dist bannerはユーザーの実際の環境設定に基づいて正確なチェックと提案を行うことができます。また、go tool dist bannerではなく%GOTOOLDIR%/dist bannerと直接呼び出す形に変更されています。
- この行が新しく追加されました。
この変更により、dist banner がユーザーに提供する情報がより正確になり、Goの環境設定に関する混乱を避けることができます。
関連リンク
- Go CL 6525049: https://golang.org/cl/6525049
参考にした情報源リンク
- GitHubコミットページ: https://github.com/golang/go/commit/2e7aaeddc4498788fe98bb9052af67894566ee5d
- Go言語の公式ドキュメント (PATH環境変数、Goのインストールなど): https://go.dev/doc/ (一般的な情報源として)
- Go言語のソースコード (src/all.bat): https://github.com/golang/go/blob/master/src/all.bat (変更前のコードの文脈理解のため)