[インデックス 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 (変更前のコードの文脈理解のため)