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

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

このコミットは、Goコマンドラインツールがcode.google.com/r/zzz形式のリポジトリをサポートしないように変更するものです。具体的には、以前の変更(CL 13261048)を元に戻し、src/cmd/go/vcs.go内の正規表現を修正して、code.google.com/p/形式のみを認識するようにします。

コミット

commit 913f1f1557541f2b16ca13a71d498a85fa585374
Author: Russ Cox <rsc@golang.org>
Date:   Thu Sep 12 21:47:56 2013 -0400

    cmd/go: do not support code.google.com/r/zzz projects
    
    This reverts CL 13261048. I have just learned that these are
    no longer supported on code.google.com (that is, it is impossible
    to create them), so there is little reason to add support in
    Go 1.2.
    
    Update #5408
    
    R=golang-dev, dave, r
    CC=golang-dev
    https://golang.org/cl/13317046

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

https://github.com/golang/go/commit/913f1f1557541f2b16ca13a71d498a85fa585374

元コミット内容

このコミットは、src/cmd/go/vcs.goファイルにおいて、code.google.com/をプレフィックスとするリポジトリの正規表現を修正しています。

変更前:

--- a/src/cmd/go/vcs.go
+++ b/src/cmd/go/vcs.go
@@ -570,7 +570,7 @@ var vcsPaths = []*vcsPath{
 	// Google Code - new syntax
 	{\n 		prefix: "code.google.com/",
-\t\tre:     `^(?P<root>code\\.google\\.com/[pr]/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$`,\n+\t\tre:     `^(?P<root>code\\.google\\.com/p/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$`,\n 		repo:   "https://{root}",
 		check:  googleCodeVCS,
 	},

具体的には、正規表現の[pr]の部分がpに変更されています。これは、code.google.com/p/形式のリポジトリのみを許可し、code.google.com/r/形式のリポジトリを許可しないようにする変更です。

変更の背景

このコミットの背景には、Goのパッケージ管理ツールであるgo getコマンドが、外部のバージョン管理システム(VCS)からソースコードを取得する際の挙動が関係しています。

コミットメッセージによると、この変更は「CL 13261048を元に戻す」ものです。CL 13261048は、code.google.com/r/zzz形式のプロジェクトをサポートするために導入されたと考えられます。しかし、このコミットの著者であるRuss Cox氏が「これらのプロジェクトはcode.google.comでサポートされなくなった(つまり、作成不可能になった)」ことを知ったため、Go 1.2でこのサポートを追加する理由がなくなったと判断しました。

code.google.com/r/は、Google Codeのリポジトリで、ユーザーがフォークしたリポジトリや、特定のレビュープロセスに関連するリポジトリを示すために使われることがありました。しかし、Google Codeのサービス方針の変更により、これらの形式のリポジトリの新規作成が不可能になったため、Goツールがこれらを特別に扱う必要がなくなったというわけです。

この変更は、Goツールのコードベースをシンプルに保ち、もはや存在しない、または作成できないリソースへのサポートを削除することを目的としています。また、関連するIssue #5408を更新しています。

前提知識の解説

Goのパッケージ管理とgo get

Go言語には、外部のライブラリやパッケージを管理するための組み込みツールとしてgo getコマンドがあります。go getは、指定されたURLからソースコードをダウンロードし、依存関係を解決し、必要に応じてビルド・インストールを行います。この際、go getはURLのパターンを解析し、どのバージョン管理システム(Git, Mercurial, Subversionなど)を使用すべきかを判断します。

src/cmd/go/vcs.go

このファイルは、goコマンドが様々なバージョン管理システム(VCS)のリポジトリURLをどのように解析し、対応するVCSコマンドを呼び出すかを定義しています。vcsPathsという変数には、既知のVCSホスティングサービスのURLパターンと、それに対応する正規表現、リポジトリのURLテンプレート、およびチェック関数がリストされています。

正規表現(Regular Expression)

正規表現は、文字列のパターンを記述するための強力なツールです。このコミットでは、code.google.comのリポジトリURLを識別するために正規表現が使用されています。

  • ^: 文字列の先頭にマッチ
  • $: 文字列の末尾にマッチ
  • ?P<name>...: 名前付きキャプチャグループ。マッチした部分をnameという名前で参照できるようにします。
  • \.: ドット.そのものにマッチ(.は正規表現で任意の1文字にマッチするため、エスケープが必要)
  • [pr]: pまたはrのいずれか1文字にマッチ
  • [a-z0-9\\-]+: 小文字の英字、数字、ハイフン-のいずれか1文字に1回以上マッチ
  • (...): グループ化
  • (...)?: グループが0回または1回出現することにマッチ

Google Code

Google Codeは、Googleが提供していたオープンソースプロジェクトのホスティングサービスです。Subversion、Git、Mercurialなどのバージョン管理システムをサポートしていました。しかし、2015年にサービスを終了し、既存のプロジェクトはGitHubなど他のプラットフォームへの移行が推奨されました。このコミットが行われた2013年時点ではまだ稼働していましたが、特定の機能(code.google.com/r/形式のプロジェクト作成)が既に廃止されていたことが示唆されています。

CL (Change List)

Goプロジェクトでは、コードの変更は「Change List (CL)」としてGerritというコードレビューシステムで管理されます。コミットメッセージに記載されているCL 13261048https://golang.org/cl/13317046は、それぞれ特定の変更セットを指す識別子とURLです。

技術的詳細

このコミットの技術的な核心は、src/cmd/go/vcs.goファイル内のvcsPathsスライスに定義されているcode.google.comエントリの正規表現の変更です。

元の正規表現(CL 13261048によって導入されたもの)は以下の通りでした。 ^(?P<root>code\\.google\\.com/[pr]/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$

この正規表現の[pr]の部分は、code.google.com/p/(通常のプロジェクト)とcode.google.com/r/(レビュー用またはフォークされたプロジェクト)の両方のパスを許可していました。

このコミットでは、正規表現が以下のように変更されました。 ^(?P<root>code\\.google\\.com/p/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$

変更点は非常に小さいですが、影響は大きいです。[pr]pに置き換えられたことで、go getコマンドはcode.google.com/r/で始まるURLを有効なGoogle Codeリポジトリとして認識しなくなります。これにより、ユーザーが誤って存在しない、またはサポートされていないリポジトリ形式にアクセスしようとした際に、go getが適切なエラーを返すか、あるいは単にそのURLを認識しないようになります。

この変更は、Goツールが現実世界の状況(Google Codeのサービス変更)に適応するための保守的な修正であり、不要なコードパスや複雑さを排除することを目的としています。

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

変更はsrc/cmd/go/vcs.goファイルの1箇所のみです。

--- a/src/cmd/go/vcs.go
+++ b/src/cmd/go/vcs.go
@@ -570,7 +570,7 @@ var vcsPaths = []*vcsPath{
 	// Google Code - new syntax
 	{\n 		prefix: "code.google.com/",
-\t\tre:     `^(?P<root>code\\.google\\.com/[pr]/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$`,\n+\t\tre:     `^(?P<root>code\\.google\\.com/p/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$`,\n 		repo:   "https://{root}",
 		check:  googleCodeVCS,
 	},

コアとなるコードの解説

src/cmd/go/vcs.goファイルには、vcsPathsというグローバル変数があります。これは[]*vcsPath型のスライスで、各vcsPath構造体は特定のVCSホスティングサービス(または一般的なVCSプロトコル)に関する情報を含んでいます。

vcsPath構造体の定義(関連部分のみ抜粋):

type vcsPath struct {
	prefix string // URL prefix (e.g., "code.google.com/")
	re     string // Regular expression to match the full URL path
	repo   string // Template for the repository URL (e.g., "https://{root}")
	check  func(*vcsPath, *url.URL) (*vcsCmd, error) // Function to perform additional checks or determine VCS type
}

このコミットで変更されたエントリは、// Google Code - new syntaxというコメントが付いている部分です。 このエントリは、prefix: "code.google.com/"を持ち、code.google.comで始まるURLを処理することを示しています。

重要なのはreフィールドです。これは、go getがURLを解析する際に使用する正規表現文字列です。 変更前は、reフィールドの値は以下の正規表現でした。 ^(?P<root>code\\.google\\.com/[pr]/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$ この正規表現は、code.google.com/p/またはcode.google.com/r/のいずれかの形式にマッチするように設計されていました。

変更後、reフィールドの値は以下の正規表現になりました。 ^(?P<root>code\\.google\\.com/p/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$ [pr]pに置き換えられたことで、この正規表現はcode.google.com/p/形式のURLのみにマッチするようになります。code.google.com/r/形式のURLは、この正規表現にはマッチしなくなり、結果としてgo getコマンドはそれらをGoogle Codeのリポジトリとして認識しなくなります。

この変更は、GoツールのURL解析ロジックを、Google Codeの実際のサポート状況に合わせて調整するものです。

関連リンク

  • Go Issue 5408: https://github.com/golang/go/issues/5408
    • このコミットメッセージで参照されているIssueです。通常、Issueには問題の背景や議論が記載されています。
  • CL 13261048 (Reverted by this commit): https://golang.org/cl/13261048
    • このコミットによって元に戻された変更リストです。このCLの内容を確認することで、どのようなサポートが追加され、それがなぜ削除されたのかをより深く理解できます。
  • CL 13317046 (This commit's CL): https://golang.org/cl/13317046
    • このコミット自体のGerrit上の変更リストです。

参考にした情報源リンク

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

このコミットは、Goコマンドラインツールがcode.google.com/r/zzz形式のリポジトリをサポートしないように変更するものです。具体的には、以前の変更(CL 13261048)を元に戻し、src/cmd/go/vcs.go内の正規表現を修正して、code.google.com/p/形式のみを認識するようにします。

コミット

commit 913f1f1557541f2b16ca13a71d498a85fa585374
Author: Russ Cox <rsc@golang.org>
Date:   Thu Sep 12 21:47:56 2013 -0400

    cmd/go: do not support code.google.com/r/zzz projects
    
    This reverts CL 13261048. I have just learned that these are
    no longer supported on code.google.com (that is, it is impossible
    to create them), so there is little reason to add support in
    Go 1.2.
    
    Update #5408
    
    R=golang-dev, dave, r
    CC=golang-dev
    https://golang.org/cl/13317046

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

https://github.com/golang/go/commit/913f1f1557541f2b16ca13a71d498a85fa585374

元コミット内容

このコミットは、src/cmd/go/vcs.goファイルにおいて、code.google.com/をプレフィックスとするリポジトリの正規表現を修正しています。

変更前:

--- a/src/cmd/go/vcs.go
+++ b/src/cmd/go/vcs.go
@@ -570,7 +570,7 @@ var vcsPaths = []*vcsPath{
 	// Google Code - new syntax
 	{\n 		prefix: "code.google.com/",
-\t\tre:     `^(?P<root>code\\.google\\.com/[pr]/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$`,\n+\t\tre:     `^(?P<root>code\\.google\\.com/p/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$`,\n 		repo:   "https://{root}",
 		check:  googleCodeVCS,
 	},

具体的には、正規表現の[pr]の部分がpに変更されています。これは、code.google.com/p/形式のリポジトリのみを許可し、code.google.com/r/形式のリポジトリを許可しないようにする変更です。

変更の背景

このコミットの背景には、Goのパッケージ管理ツールであるgo getコマンドが、外部のバージョン管理システム(VCS)からソースコードを取得する際の挙動が関係しています。

コミットメッセージによると、この変更は「CL 13261048を元に戻す」ものです。CL 13261048は、code.google.com/r/zzz形式のプロジェクトをサポートするために導入されたと考えられます。しかし、このコミットの著者であるRuss Cox氏が「これらのプロジェクトはcode.google.comでサポートされなくなった(つまり、作成不可能になった)」ことを知ったため、Go 1.2でこのサポートを追加する理由がなくなったと判断しました。

code.google.com/r/は、Google Codeのリポジトリで、ユーザーがフォークしたリポジトリや、特定のレビュープロセスに関連するリポジトリを示すために使われることがありました。しかし、Google Codeのサービス方針の変更により、これらの形式のリポジトリの新規作成が不可能になったため、Goツールがこれらを特別に扱う必要がなくなったというわけです。

この変更は、Goツールのコードベースをシンプルに保ち、もはや存在しない、または作成できないリソースへのサポートを削除することを目的としています。また、関連するIssue #5408を更新しています。

前提知識の解説

Goのパッケージ管理とgo get

Go言語には、外部のライブラリやパッケージを管理するための組み込みツールとしてgo getコマンドがあります。go getは、指定されたURLからソースコードをダウンロードし、依存関係を解決し、必要に応じてビルド・インストールを行います。この際、go getはURLのパターンを解析し、どのバージョン管理システム(Git, Mercurial, Subversionなど)を使用すべきかを判断します。

src/cmd/go/vcs.go

このファイルは、goコマンドが様々なバージョン管理システム(VCS)のリポジトリURLをどのように解析し、対応するVCSコマンドを呼び出すかを定義しています。vcsPathsという変数には、既知のVCSホスティングサービスのURLパターンと、それに対応する正規表現、リポジトリのURLテンプレート、およびチェック関数がリストされています。

正規表現(Regular Expression)

正規表現は、文字列のパターンを記述するための強力なツールです。このコミットでは、code.google.comのリポジトリURLを識別するために正規表現が使用されています。

  • ^: 文字列の先頭にマッチ
  • $: 文字列の末尾にマッチ
  • ?P<name>...: 名前付きキャプチャグループ。マッチした部分をnameという名前で参照できるようにします。
  • \.: ドット.そのものにマッチ(.は正規表現で任意の1文字にマッチするため、エスケープが必要)
  • [pr]: pまたはrのいずれか1文字にマッチ
  • [a-z0-9\\-]+: 小文字の英字、数字、ハイフン-のいずれか1文字に1回以上マッチ
  • (...): グループ化
  • (...)?: グループが0回または1回出現することにマッチ

Google Code

Google Codeは、Googleが提供していたオープンソースプロジェクトのホスティングサービスです。Subversion、Git、Mercurialなどのバージョン管理システムをサポートしていました。しかし、2015年にサービスを終了し、既存のプロジェクトはGitHubなど他のプラットフォームへの移行が推奨されました。このコミットが行われた2013年時点ではまだ稼働していましたが、特定の機能(code.google.com/r/形式のプロジェクト作成)が既に廃止されていたことが示唆されています。

CL (Change List)

Goプロジェクトでは、コードの変更は「Change List (CL)」としてGerritというコードレビューシステムで管理されます。コミットメッセージに記載されているCL 13261048https://golang.org/cl/13317046は、それぞれ特定の変更セットを指す識別子とURLです。

技術的詳細

このコミットの技術的な核心は、src/cmd/go/vcs.goファイル内のvcsPathsスライスに定義されているcode.google.comエントリの正規表現の変更です。

元の正規表現(CL 13261048によって導入されたもの)は以下の通りでした。 ^(?P<root>code\\.google\\.com/[pr]/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$

この正規表現の[pr]の部分は、code.google.com/p/(通常のプロジェクト)とcode.google.com/r/(レビュー用またはフォークされたプロジェクト)の両方のパスを許可していました。

このコミットでは、正規表現が以下のように変更されました。 ^(?P<root>code\\.google\\.com/p/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$

変更点は非常に小さいですが、影響は大きいです。[pr]pに置き換えられたことで、go getコマンドはcode.google.com/r/で始まるURLを有効なGoogle Codeリポジトリとして認識しなくなります。これにより、ユーザーが誤って存在しない、またはサポートされていないリポジトリ形式にアクセスしようとした際に、go getが適切なエラーを返すか、あるいは単にそのURLを認識しないようになります。

この変更は、Goツールが現実世界の状況(Google Codeのサービス変更)に適応するための保守的な修正であり、不要なコードパスや複雑さを排除することを目的としています。

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

変更はsrc/cmd/go/vcs.goファイルの1箇所のみです。

--- a/src/cmd/go/vcs.go
+++ b/src/cmd/go/vcs.go
@@ -570,7 +570,7 @@ var vcsPaths = []*vcsPath{
 	// Google Code - new syntax
 	{\n 		prefix: "code.google.com/",
-\t\tre:     `^(?P<root>code\\.google\\.com/[pr]/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$`,\n+\t\tre:     `^(?P<root>code\\.google\\.com/p/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$`,\n 		repo:   "https://{root}",
 		check:  googleCodeVCS,
 	},

コアとなるコードの解説

src/cmd/go/vcs.goファイルには、vcsPathsというグローバル変数があります。これは[]*vcsPath型のスライスで、各vcsPath構造体は特定のVCSホスティングサービス(または一般的なVCSプロトコル)に関する情報を含んでいます。

vcsPath構造体の定義(関連部分のみ抜粋):

type vcsPath struct {
	prefix string // URL prefix (e.g., "code.google.com/")
	re     string // Regular expression to match the full URL path
	repo   string // Template for the repository URL (e.g., "https://{root}")
	check  func(*vcsPath, *url.URL) (*vcsCmd, error) // Function to perform additional checks or determine VCS type
}

このコミットで変更されたエントリは、// Google Code - new syntaxというコメントが付いている部分です。 このエントryは、prefix: "code.google.com/"を持ち、code.google.comで始まるURLを処理することを示しています。

重要なのはreフィールドです。これは、go getがURLを解析する際に使用する正規表現文字列です。 変更前は、reフィールドの値は以下の正規表現でした。 ^(?P<root>code\\.google\\.com/[pr]/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$ この正規表現は、code.google.com/p/またはcode.google.com/r/のいずれかの形式にマッチするように設計されていました。

変更後、reフィールドの値は以下の正規表現になりました。 ^(?P<root>code\\.google\\.com/p/(?P<project>[a-z0-9\\-]+)(\\.(?P<subrepo>[a-z0-9\\-]+))?)(/[A-Za-z0-9_.\\-]+)*$ [pr]pに置き換えられたことで、この正規表現はcode.google.com/p/形式のURLのみにマッチするようになります。code.google.com/r/形式のURLは、この正規表現にはマッチしなくなり、結果としてgo getコマンドはそれらをGoogle Codeのリポジトリとして認識しなくなります。

この変更は、GoツールのURL解析ロジックを、Google Codeの実際のサポート状況に合わせて調整するものです。

関連リンク

  • Go Issue 5408: https://github.com/golang/go/issues/5408
    • このコミットメッセージで参照されているIssueです。通常、Issueには問題の背景や議論が記載されています。
  • CL 13261048 (Reverted by this commit): https://golang.org/cl/13261048
    • このコミットによって元に戻された変更リストです。このCLの内容を確認することで、どのようなサポートが追加され、それがなぜ削除されたのかをより深く理解できます。
  • CL 13317046 (This commit's CL): https://golang.org/cl/13317046
    • このコミット自体のGerrit上の変更リストです。

参考にした情報源リンク