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

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

このコミットは、Go言語プロジェクトのバージョン管理システムであるMercurialの設定ファイル .hgignore から、もはや不要となったエントリを削除するものです。これにより、リポジトリのクリーンアップと管理の効率化が図られています。具体的には、古いコンパイラ関連の生成物や、実験的なパッケージに関連するファイルが無視リストから削除されています。

コミット

  • コミットハッシュ: f8067ad67ac24c88c949771644b5d2db69441459
  • Author: Rémy Oudompheng oudomphe@phare.normalesup.org
  • Date: Sun Jun 2 11:36:09 2013 +0200

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/f8067ad67ac24c88c949771644b5d2db69441459

元コミット内容

hgignore: cleanup obsolete entries.

R=golang-dev, dave, r
CC=golang-dev
https://golang.org/cl/9935043

変更の背景

Go言語プロジェクトは、初期にはMercurialという分散型バージョン管理システムを使用していました。.hgignore ファイルは、Mercurialが管理するリポジトリにおいて、特定のファイルやディレクトリをバージョン管理の対象から除外するための設定ファイルです。これはGitにおける .gitignore と同様の役割を果たします。

このコミットが行われた2013年6月時点では、GoプロジェクトはまだMercurialを主要なバージョン管理システムとして利用していました。しかし、時間の経過とともに、プロジェクトのビルドプロセスや開発ツール、あるいは実験的な機能の構成が変化し、以前は無視する必要があったファイルが、もはや生成されなくなったり、関連する機能自体が削除されたりすることがあります。

このコミットの背景には、以下のような理由が考えられます。

  1. ビルドシステムの変更: Goコンパイラやツールのビルドプロセスが変更され、src/cmd/6a/6a のような特定の生成物が作成されなくなった。
  2. 実験的パッケージの廃止または統合: src/pkg/exp/normsrc/pkg/exp/ebnflint のような実験的なパッケージが、Goの標準ライブラリに統合されたか、あるいは開発が中止され、関連する生成ファイルが不要になった。
  3. リポジトリのクリーンアップ: 不要なエントリを .hgignore から削除することで、ファイルの無視ルールを最新の状態に保ち、リポジトリの管理を簡素化する目的。これにより、開発者が誤って存在しないファイルを無視しようとしたり、混乱を招いたりするのを防ぎます。

前提知識の解説

Mercurialと.hgignore

  • Mercurial (Hg): Gitと同様の分散型バージョン管理システムです。Go言語プロジェクトは、初期にはMercurialを主要なバージョン管理システムとして採用していましたが、後にGitに移行しました。
  • .hgignore: Mercurialリポジトリのルートディレクトリに配置される設定ファイルで、バージョン管理の対象から除外するファイルやディレクトリのパターンを記述します。これはGitの .gitignore と機能的に同等です。ビルド生成物、一時ファイル、IDEの設定ファイルなど、リポジトリに含めるべきではないファイルを指定するために使用されます。

Go言語のビルドシステムとツール

  • src/cmd/6a/6a: Go言語の初期のコンパイラは、各アーキテクチャ(例: 6はamd64、8はarm、5は386)ごとに異なる名前を持っていました。6a はamd64アーキテクチャ向けのGoアセンブラを指します。このエントリは、アセンブラのビルド生成物を無視するためのものでした。Goのビルドシステムが進化し、これらのツールが異なる方法で管理されるようになったため、このエントリは不要になったと考えられます。
  • y.output: yacc (Yet Another Compiler Compiler) や bison などのパーサジェネレータが生成するデバッグ情報ファイルです。Goコンパイラの一部は、構文解析のためにこれらのツールを使用していた可能性があります。y.output は、パーサの内部状態やルールに関する詳細な情報を含んでおり、通常はビルド生成物としてバージョン管理の対象外とされます。
  • src/pkg/exp/norm: exp (experimental) ディレクトリは、Goの標準ライブラリに統合される前の実験的なパッケージを格納するために使用されていました。norm パッケージは、Unicodeの正規化(Normalization)に関連する機能を提供していたと考えられます。
    • maketables: Unicode正規化に必要なテーブルを生成するツール。
    • maketesttables: テスト用のUnicode正規化テーブルを生成するツール。
    • normregtest: 正規化の回帰テストを実行するツール。 これらのファイルは、パッケージの開発やテスト中に生成される一時ファイルや実行ファイルであり、通常はバージョン管理の対象外とされます。
  • src/pkg/exp/ebnflint/ebnflint: ebnflint は、拡張バッカス・ナウア記法 (EBNF) で記述された文法定義をチェックするリンター(静的解析ツール)であったと推測されます。Go言語の文法定義や、特定のパーサの文法定義を検証するために使用されていた可能性があります。これも実験的なツールであり、その実行ファイルが無視リストに含まれていました。

技術的詳細

このコミットは、.hgignore ファイルから5行を削除しています。これは、Mercurialがこれらのパターンに一致するファイルを無視しないようにすることを意味しますが、この文脈では「もはやこれらのファイルは存在しないか、生成されないため、無視する必要がない」という意図です。

削除された各エントリは、Go言語のビルドプロセスや開発ツールチェーンの特定の側面に関連していました。

  1. - src/cmd/6a/6a:

    • これは、Goの初期のビルドシステムで生成される 6a (amd64アセンブラ) の実行ファイルを無視するためのルールでした。Goのツールチェーンが成熟し、ビルドアーティファクトの管理方法が変更されたため、この特定のパスでの生成物がなくなったか、あるいはより一般的なルールでカバーされるようになったと考えられます。
  2. - src/pkg/exp/norm/maketables

  3. - src/pkg/exp/norm/maketesttables

  4. - src/pkg/exp/norm/normregtest

    • これらは、src/pkg/exp/norm パッケージに関連する実行ファイルです。exp ディレクトリは、Goの標準ライブラリに昇格する前の実験的なコードをホストしていました。norm パッケージがGoの標準ライブラリに統合されたか、あるいはその開発が中止されたため、これらの生成ツールやテストツールが不要になったと考えられます。これらのツールは、Unicode正規化テーブルの生成やテストに使用されていました。
  5. - src/pkg/exp/ebnflint/ebnflint

    • これは、src/pkg/exp/ebnflint パッケージに関連する実行ファイルです。ebnflint はEBNF文法をチェックするリンターであり、Go言語の文法解析やツール開発の過程で一時的に使用されていた可能性があります。このツールがもはや使用されなくなったか、あるいはその機能が他のツールに統合されたため、無視リストから削除されました。

これらのエントリの削除は、Goプロジェクトの進化と、それに伴うビルドシステム、ツール、および実験的パッケージの変更を反映しています。不要な無視ルールを削除することで、.hgignore ファイルはより簡潔になり、現在のプロジェクトの状態を正確に反映するようになります。

コアとなるコードの変更箇所

--- a/.hgignore
+++ b/.hgignore
@@ -32,7 +32,6 @@ misc/dashboard/builder/builder
 misc/goplay/goplay
 misc/osx/*.pkg
 misc/osx/*.dmg
--src/cmd/6a/6a
 src/cmd/?a/y.output
 src/cmd/?l/enam.c
 src/cmd/cc/y.output
@@ -40,10 +39,6 @@ src/cmd/dist/dist.dSYM
 src/cmd/gc/mkbuiltin1
 src/cmd/gc/opnames.h
 src/cmd/gc/y.output
--src/pkg/exp/norm/maketables
--src/pkg/exp/norm/maketesttables
--src/pkg/exp/norm/normregtest
--src/pkg/exp/ebnflint/ebnflint
 src/pkg/go/doc/headscan
 src/pkg/runtime/goc2c
 src/pkg/runtime/mkversion

コアとなるコードの解説

上記の diff は、.hgignore ファイルから削除された5行を示しています。各行の先頭にある - は、その行が削除されたことを意味します。

  • -src/cmd/6a/6a:

    • Goのamd64アセンブラ 6a の実行ファイルを無視するルールが削除されました。これは、Goのビルドシステムが進化し、この特定のパスでアセンブラの実行ファイルが生成されなくなったことを示唆しています。
  • -src/pkg/exp/norm/maketables

  • -src/pkg/exp/norm/maketesttables

  • -src/pkg/exp/norm/normregtest

    • これらは、実験的なUnicode正規化パッケージ exp/norm に関連する生成物(テーブル生成ツール、テストテーブル生成ツール、回帰テスト実行ファイル)を無視するルールでした。これらのルールが削除されたのは、exp/norm パッケージがGoの標準ライブラリに統合されたか、あるいはその開発が終了し、これらのファイルがもはや生成されなくなったためと考えられます。
  • -src/pkg/exp/ebnflint/ebnflint

    • 実験的なEBNFリンター exp/ebnflint の実行ファイルを無視するルールが削除されました。これも同様に、このツールが不要になったか、その機能が他の場所に移行したことを示しています。

これらの変更は、Goプロジェクトのコードベースが時間の経過とともに進化し、不要になったビルド生成物や実験的なツールの痕跡をクリーンアップしていることを明確に示しています。これにより、バージョン管理システムの設定が最新の状態に保たれ、開発者がより効率的に作業できるようになります。

関連リンク

参考にした情報源リンク