オープンソース資料館
今回のテーマは、Subversionの名前の変更について。
2019/4/13: Subversionのユーザ名変更の件
前提
Subversion 1.10
(バージョン依存はあまりないはずだが一応)
Subversionのコンフリクトの解決は人間がやる
Subversionのようなバージョン管理をする場合に、他の開発者・編集者との間で修正のコンフリクトが生じる場合がある。その場合、Subversionではコンフリクトを起こしている開発者同士が話し合って、「どちらの変更を優先して残すか」を決定して処理する必要がある。Subversionが勝手に決めるのではなく、人と人が話し合って決めるのだ。
「誰と話せばいい?」
さて、人間が話して決着させる、というのはいいとして「誰と話せばいいのか?」が問題になる。コンフリクトを起こしたリビジョンがわかれば、リポジトリブラウザで見れば、ログが残っているはずだが・・。
Subversionはコミットしたリビジョンの情報を「リビジョン・プロパティ」として持っており、そこにコミットした人(author)が記録される。しかし、それはログインしたときのIDになっていて、例えば社員番号などが使われて"19040001"のような名前だったりする。
会社の中で社員番号を見て誰かわかる、といった方がまれだろう。つまり、話し合って解決しろ、と言われてもなかなか難しく、「誰と話せばいいのさ?」状態になってしまう。
リビジョン・プロパティを書き換える
となれば、リビジョン・プロパティを書き換える手がある。デフォルトでは書き換え禁止になっているので、pre-revprop-changeフックスクリプトを有効化し、0をリターンするようにする。これで書き換えられる。ただ単純に0をリータンするとコメントなども書き換える事ができて都合が悪いこともあるので、書き換え項目が「authorである場合」などの条件をつけても良い。
そして、書き換える場合、多くはLDAPサーバなどから項目を引っ張ってくることになる。次のようなスクリプトになる。
(1) post-commitフックスクリプトにて、取得できるリビジョン番号(とリポジトリ名)を取得し、そのリビジョン番号からIDを取得する。
(svnlook author リポジトリ -r リビジョン番号 )
(2) LDAPサーチで、当該IDの姓・名などを検索する
(ldap search LDAPのURL ユーザID項目=#1で取得したID)
(3) svn propsetで書き換える
svn propset svn:author --revprop -r リビジョン 取得した名前 (以下略)
これでリビジョン・プロパティのコミットした人が無味乾燥な記号番号から名前に置き換えられ、(物理的に)容易に探せるようになる。
一応念のための注意
この変換を行うpost-commitでは、svnsyncも一緒に走らせていることが多い。その場合、まず名前変換をして、それからsvnsyncをやるようにすべきだ。
なぜなら、先にsvnsyncをかけてしまうと、リビジョン・プロパティをスレーブ側にコピーしてくれないからだ。svnsyncは既に同期済みのリビジョンは同期対象にしないので、svnsync後に書き換えてしまうと、そのリビジョンの変更はずっと同期されない(スレーブに反映されない)ままになってしまう。その点注意が必要だ。
お問い合わせください
OSSPlazaでは、Subvesrionサーバの構築やサポートを行っています。サーバの構築や入れ替えを検討中であれば、ぜひお問い合わせください。ここでご紹介した名前変換スクリプトもお客さまの環境に合わせて作成します。