複数のSubversionレポジトリたちを upgrade
Subversion 1.7 では,Git風の「トップディレクトリのみに .svn/
を置く」というスタイル (WC-NG) に変更された.さらに中身は以前のPascal文字列風KVペアからSQLiteになったようだ.
- http://subversion.jp/index.php/about-subversion/74-apachesubversion17-releasenote Apache Subversion 1.7 Release Notes
いやSVNに期待されているのはそういうことではないと思うんだが... 前方互換を崩すほどのことか!?
ともあれ.1.6 でチェックアウトしたワーキング・コピーを 1.7 で使うには, svn upgrade
と打って変換をかける必要がある.ところがChromium browserの自前ビルドなど,多数のSVNワーキング・コピーをツール (depot_tools
の gclient
) で自動チェックアウトした環境ではこれは辛い.ということでBashにループさせる.
while ((1)); do x=`find . -type f -name all-wcprops | head -1` if [ -f "$x" ]; then d=${x%/*} d=${d%/*} ( cd $d; svn upgrade ) else break fi done
1.6 の .svn/
ディレクトリの識別に,旧式のKVペア・データファイルである .svn/all-wcprops
を使った.なお ${x%/*}
は dirname $x
と等価なはず(bash(1)
→ "Parameter Expansion").プロセス呼び出しコストが怖くて... 貧乏性ですんません.
svn upgrade
が終わるたびに find(1)
がディレクトリ・ツリーを最初から舐めてるが,これくらいの非効率は許してほしい.find(1)
の出力で列挙される .svn/all-wcprops
のうち,一回の svn upgrade
でいくつがカバーされるか分からないのでね.