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

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

コミット

  • コミットハッシュ: da356dc3a96b505c1cc1d1e8459b5336ee1315a9
  • 作成者: Andrew Gerrand adg@golang.org
  • 日付: 2011年10月19日 11:51:32 +1100
  • コミットメッセージ: tag weekly.2011-10-18
  • 変更概要: .hgtagsファイルに新たに2つのタグを追加

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

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

元コミット内容

commit da356dc3a96b505c1cc1d1e8459b5336ee1315a9
Author: Andrew Gerrand <adg@golang.org>
Date:   Wed Oct 19 11:51:32 2011 +1100

    tag weekly.2011-10-18
    
    R=golang-dev
    CC=golang-dev
    https://golang.org/cl/5292045
---
 .hgtags | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.hgtags b/.hgtags
index 9fc608e052..c2ac5ed608 100644
--- a/.hgtags
+++ b/.hgtags
@@ -87,3 +87,5 @@ d7322ae4d055a4cf3efaf842d0717a41acd85bac weekly.2011-09-21
 c1702f36df0397c19fc333571a771666029aa37e release.r60.3
 c1702f36df0397c19fc333571a771666029aa37e release
 acaddf1cea75c059d19b20dbef35b20fb3f38954 release.r58.2
+6d7136d74b656ba6e1194853a9486375005227ef weekly.2011-10-18
+6d7136d74b656ba6e1194853a9486375005227ef weekly

変更の背景

このコミットは2011年10月19日に行われた、Go言語の週次リリースプロセスの一環として実施されたタグ付け作業です。2011年当時、Go言語は正式版1.0の リリース(2012年3月)に向けて開発が進んでいましたが、その間は週次リリースシステムを採用していました。

この時期のGo言語は、開発の安定性を高めるために週次の不安定リリースから、より頻度の低い安定リリースへの移行を進めている段階でした。週次リリースシステムは、開発者が最新の機能を利用できる一方で、特定の時点での安定したバージョンを提供する役割を果たしていました。

Andrew Gerrandは、Google のGo言語チームの中核メンバーであり、このようなリリース管理作業を担当していました。彼はGo言語の開発初期から関わり、コミュニティとの連携やリリース管理において重要な役割を果たしていました。

前提知識の解説

Mercurial(hg)とは

Mercurialは分散型バージョン管理システムで、Go言語プロジェクトは2009年のオープンソース化から2014年まで使用していました。Mercurialが選ばれた理由は:

  1. Google Codeとの互換性: 当時Google Codeでサポートされていた最良のVCSであった
  2. コードレビューシステム: Googleが使用していたコードレビューシステム(Rietveld)との連携が良好
  3. 企業ポリシー: Googleが自社インフラで自社のオープンソースプロジェクトをホストする方針

.hgtagsファイルとは

.hgtagsファイルは、Mercurialにおけるタグ情報を保存するファイルです:

  • 構造: 各行にコミットハッシュとタグ名のペアが記録される
  • 仕様: 追記専用(append-only)で、行の削除や編集は行わない
  • 管理: hg tagコマンドを実行すると、このファイルが自動的に更新される
  • 優先度: 複数のブランチヘッドにある.hgtagsファイルがある場合、tipに最も近いタグが優先される

Go言語の週次リリースシステム

2011年当時のGo言語は以下のリリース体系を採用していました:

  1. 週次リリース(weekly): 大体週に1回作成される、最新の機能を含む開発版
  2. 安定リリース(release): より安定性を重視した、テストが充実したバージョン
  3. tip: 最新のコミット(開発の最前線)

開発者は以下のコマンドで異なるバージョンを使用できました:

  • hg update weekly: 最新の週次リリースを使用
  • hg update release: 最新の安定リリースを使用
  • hg update tip: 最新のコミットを使用

技術的詳細

タグ付けの意味

このコミットでは、コミットハッシュ6d7136d74b656ba6e1194853a9486375005227efに対して2つのタグが付けられています:

  1. weekly.2011-10-18: 特定の日付(2011年10月18日)を示す週次リリースタグ
  2. weekly: 最新の週次リリースを指すシンボリックタグ

Mercurialのタグ管理メカニズム

Mercurialでは、タグは以下の方法で管理されます:

  1. ファイルベース: タグ情報は.hgtagsファイルに保存される
  2. 分散管理: 各クローンが独自の.hgtagsファイルを持つ
  3. コミット対象: .hgtagsファイルの変更も通常のコミットとして履歴に記録される
  4. 追記専用: 既存のタグを変更する場合も、新しい行を追加する方式

リリース管理との連携

このタグ付けにより、開発者は以下のことが可能になります:

  1. バージョン指定: 特定の週次リリースを指定してチェックアウト可能
  2. 自動更新: hg update weeklyで常に最新の週次リリースを取得
  3. 履歴管理: 各週次リリースの履歴を追跡可能
  4. リリースノート: 各週次リリースの変更内容を明確化

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

.hgtags ファイルの変更

@@ -87,3 +87,5 @@ d7322ae4d055a4cf3efaf842d0717a41acd85bac weekly.2011-09-21
 c1702f36df0397c19fc333571a771666029aa37e release.r60.3
 c1702f36df0397c19fc333571a771666029aa37e release
 acaddf1cea75c059d19b20dbef35b20fb3f38954 release.r58.2
+6d7136d74b656ba6e1194853a9486375005227ef weekly.2011-10-18
+6d7136d74b656ba6e1194853a9486375005227ef weekly

具体的な変更内容

追加された行:

  • 6d7136d74b656ba6e1194853a9486375005227ef weekly.2011-10-18
  • 6d7136d74b656ba6e1194853a9486375005227ef weekly

既存の文脈:

  • 前の週次リリース:weekly.2011-09-21(9月21日)
  • 複数の安定リリース:release.r60.3release.r58.2

コアとなるコードの解説

タグエントリの構造

各行は以下の形式で構成されています:

<コミットハッシュ> <タグ名>
  • コミットハッシュ: 40文字のSHA-1ハッシュ値
  • タグ名: 人間が読みやすい名前(例:weekly.2011-10-18

同一コミットへの複数タグ

同じコミットハッシュ6d7136d74b656ba6e1194853a9486375005227efに2つのタグが付けられていることに注目してください:

  1. weekly.2011-10-18: 特定の日付を示す固定タグ
  2. weekly: 現在の最新週次リリースを示すフローティングタグ

タグの意味と用途

固定タグ(weekly.2011-10-18:

  • 歴史的な記録として永続的に保持
  • 特定の時点での状態を再現する際に使用
  • リリースノートや変更履歴の参照に使用

フローティングタグ(weekly:

  • 常に最新の週次リリースを指す
  • 開発者が最新の週次版を取得する際に使用
  • 次の週次リリースが作成されると、新しいコミットを指すように更新される

リリースタイムラインの理解

.hgtagsファイルから読み取れるリリースタイムライン:

  1. 2011年9月21日: weekly.2011-09-21
  2. 2011年10月18日: weekly.2011-10-18(このコミット)
  3. 約1ヶ月間隔: 週次リリースとしては間隔が長いが、これは開発の安定性を重視した結果

Mercurialの内部処理

このコミットが行われると、Mercurialは以下の処理を実行します:

  1. ファイル更新: .hgtagsファイルに新しい行を追加
  2. コミット作成: ファイルの変更を新しいコミットとして記録
  3. タグ認識: 新しいタグが有効になり、hg update weekly等で参照可能
  4. 履歴更新: リポジトリの履歴にタグ情報が永続化

関連リンク

参考にした情報源リンク