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

[インデックス 13876] ファイルの概要

このコミットは、Go言語のWindowsビルドスクリプトである src/all.bat における dist banner コマンドの実行ロジックを修正するものです。具体的には、dist bannerGOROOT/binPATH に追加するよう提案する際に、正しい 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/binPATH に含まれているかなどをチェックし、ユーザーに情報や提案を表示します。
  • GOROOT: Go言語のインストールディレクトリのルートパスを示す環境変数です。例えば、Goが C:\Go にインストールされている場合、GOROOTC:\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/binPATH への追加に関する正確な提案を行うことができるようになりました。

また、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%\

コアとなるコードの解説

変更された行は以下の通りです。

  1. -go tool dist banner

    • この行は削除されました。これは、dist banner の実行タイミングが不適切であったためです。
  2. +:: 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 を復元する必要があることを示しています。
  3. set PATH=%OLDPATH%\

    • この行は変更されていませんが、その位置が重要です。この行は、スクリプトによって一時的に変更された PATH 環境変数を、スクリプト実行前の元の状態に復元します。
  4. +%GOTOOLDIR%/dist banner

    • この行が新しく追加されました。set PATH=%OLDPATH% の直後に配置されることで、dist banner コマンドが実行される際には、PATH 環境変数が既に元の状態に復元されています。これにより、dist banner はユーザーの実際の環境設定に基づいて正確なチェックと提案を行うことができます。また、go tool dist banner ではなく %GOTOOLDIR%/dist banner と直接呼び出す形に変更されています。

この変更により、dist banner がユーザーに提供する情報がより正確になり、Goの環境設定に関する混乱を避けることができます。

関連リンク

参考にした情報源リンク