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-checkoout
や update-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
コマンドが発行される様子でした。