Swift ソースコードを最新版にアップデートする

Swift プログラミング

Swift コンパイラーのソースコードを更新するのに使う update-checkout をどんなふうに使えるのか、簡単にながら整理してみました。


以前に こちら で整えた Swift コンパイラーのビルド環境で、ダウンロードされているソースコードを最新版にアップデートする方法を調べてみました。

ソースコードを更新する

Swift オープンソースのソースコードを更新するシンプルな方法は、Swift ソースコードをダウンロードした swift-source ディレクトリーで、次のコマンドを実行します。

./swift/utils/update-checkout

そうすると、構成されている全てのターゲットそれぞれがフェッチされてリベースされる様子でした。コンソールに出力されるテキストを抜粋すると次のような感じです。

+ git fetch --recurse-submodules=yes --tags
+ git rebase FETCH_HEAD
+ git submodule update --recursive

更新されるブランチ

このようにしてアップデートを実行すると、更新は 現在のブランチに対して 行われる様子です。たとえば自分で別のブランチを作成して、それがチェックアウトされているときは、それに対してアップデート処理が行われます。

ブランチを標準のものに切り替えたい場合には、以下で紹介する "ブランチスキームを指定する方法" を使います。

アップデートで使える機能

ソースコードの取得やアップデートで使う ./swift/utils/update-checkout は、いくつかの機能が用意されている様子なので、それについても少しばかり調べてみます。

ブランチスキームを指定して更新する

アップデートコマンドと同じディレクトリーに保存されている swift/update-checkout-config.json には、いくつかの ブランチスキーム が登録されています。

既定のブランチスキームは "master" が指定されているのですけど、次のように --scheme オプションを使うことで、スキームを指定して更新することができます。ブランチスキームを指定すると、指定したブランチスキームで指定されているブランチがチェックアウトされます。

./swift/utils/update-checkout --scheme=swift-3.1-branch

ターゲットのブランチを標準のものに切り替えたいとき

たとえば、自分でいろんなターゲットにブランチを作成したりしたときに、それらを全て 標準のブランチに戻したいとき にも update-checkout が使えそうです。

たとえば次のようにして、ブランチスキームに "master" を指定することで、全てのターゲットのブランチが "master" や "stable" などの適切なものに切り替わってくれます。

./swift/utils/update-checkout --master

ブランチスキームを指定したときの注意

ブランチスキームを指定すると "swift" を含む全てのターゲットのブランチが切り替えられる ので、それに伴って update-checkooutupdate-checkout-config.json も合わせて更新されます。 そのため、再びブランチを切り替えようとしたときに、切り替えたいブランチスキームが存在しなかったり、そもそも update-checkout スクリプトが動いてくれなかったりすることがある様子です。

そのような場合は、次のようにして "swift" ターゲットのブランチを master に切り替えた上で update-checkout スクリプトを実行し直すと上手くいくようになったりするようでした。切り替えるのは "swift" ターゲットのブランチだけで大丈夫です。

git checkout master

変更をリセットする

ローカルのコミットを強制的にリセットして、サーバー側と同じ状態にしたい場合は、次のように --reset-to-remote を添えて実行します。このとき、どの状態にリセットするかを ブランチスキームで指定 します。

./swift/utils/update-checkout --master --reset-to-remote

このようにすると git rebase FETCH_HEAD ではなく git reset --hard origin/master みたいな感じで git コマンドが発行される様子でした。