Hudsonの開発環境をgit-svnで準備する

Hudsonの開発ソースコードSubversionでホストされているので、Hudson本体やプラグインを開発するにはSubversionを使う必要があります。でも、Hudsonは多数のコントリビュータによって開発されていますので、Subversionのような中央リポジトリに対する頻繁なコミットは慣れないと気が引けますし、でもローカルに変更は持ち続けたくないので、できれば今流行のGitなどの分散SCMを使いたいところです。

そこで、Gitにはgit-svnという、Subversion中央リポジトリ + Gitローカルリポジトリという使い方ができるものがあるようなので、これを使ってHudsonの開発環境を整えてみます。

こちらのサイトを参考にしました。

まずはyumでgitをインストールします。

$ sudo yum install git

Hudsonの独自ビルド方法は公式ページにあります。

これによると、普通のSubversionによるチェックアウトはこのようにやるようです。

$ svn co https://svn.dev.java.net/svn/hudson/trunk/hudson

git-svnでは次のようになります。

$ git svn clone https://fujibee@svn.dev.java.net/svn/hudson/trunk/hudson
Using existing [svn-remote "svn"]
Authentication realm: <https://svn.dev.java.net:443> CollabNet Subversion Repository
Password for 'fujibee': Can't locate Term/ReadKey.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/bin/git-svn line 2272.

うーん、Perlモジュールエラー?おそらく、認証が通らなかっただけだと思うので、認証だけsvnコマンドで通してみます。

$ svn info --username fujibee https://svn.dev.java.net/svn/hudson/trunk/hudson
認証領域: <https://svn.dev.java.net:443> CollabNet Subversion Repository
'fujibee' のパスワード:
-----------------------------------------------------------------------
**注意**  認証領域

   <https://svn.dev.java.net:443> CollabNet Subversion Repository

のパスワードは暗号化されていないディスクに保存されるだけです! 可能なら、
Subversion がパスワードを暗号化して保存できるよう、システムを設定するこ
とをお勧めします。詳しくはドキュメントを参照してください。

'/home/fujibee/.subversion/servers''store-plaintext-passwords' オプションの値を 'yes' または 'no'
に設定すると、この警告がこれ以上現れないようにすることができます。
-----------------------------------------------------------------------
暗号化されていないパスワードを保存しますか (yes/no)? yes

怪しげな警告が。。でも、平文でパスワードが保存されているだけだと思うので、パーミッションを変えればいいでしょう。

$ ls -l ~/.subversion/auth/
合計 16
drwxrwxr-x 2 fujibee fujibee 4096  814 00:22 svn.simple
drwxrwxr-x 2 fujibee fujibee 4096  814 00:10 svn.ssl.client-passphrase
drwxrwxr-x 2 fujibee fujibee 4096  814 00:10 svn.ssl.server
drwxrwxr-x 2 fujibee fujibee 4096  814 00:10 svn.username

確かに認証系のファイルができてそうです。

$ chmod -R go-rwx ~/.subversion/auth/
$ ls -l ~/.subversion/auth/
合計 16
drwx------ 2 fujibee fujibee 4096  814 00:22 svn.simple
drwx------ 2 fujibee fujibee 4096  814 00:10 svn.ssl.client-passphrase
drwx------ 2 fujibee fujibee 4096  814 00:10 svn.ssl.server
drwx------ 2 fujibee fujibee 4096  814 00:10 svn.username

これでOK。気を取り直して、git-svn、をしてみたのですが、先ほどのエラーで残骸が残ってしまったようなのでいったん消します。

$ rm -rf hudson/

再度。

$ git svn clone https://fujibee@svn.dev.java.net/svn/hudson/trunk/hudson
Initialized empty Git repository in .git/
        A       hudson.iml
        A       lib/retroweaver/retroweaver.jar
        A       lib/retroweaver/bcel-5.1.jar
        A       lib/retroweaver/Regex.jar
        A       lib/retroweaver/jace.jar
        A       lib/stapler.jar

うまくいきました!でも、リポジトリ取得まで時間がかかる様子。。screen上で実行していてよかった。

途中経過。

        A       plugins/jwsdp-sqe/src/main/webapp/help.html
        A       plugins/jwsdp-sqe/pom.xml
        A       plugins/jwsdp-sqe/.cvsignore
r974 = b51ffed625c3fdbd2cc41a2a76330a8835c63d54 (git-svn)
        M       main/war/pom.xml
r975 = 96ae059f1bc3dbf6f064e1ce89ad233cfdc6dd1f (git-svn)
        M       main/core/src/main/resources/hudson/model/JobCollection/index.jelly
r976 = 0ed7f7113b33f3041de7738ed43cbebc92a20e95 (git-svn)
        A       tools/maven-hpi-plugin/.cvsignore
        A       main/core/pom.xml
        A       main/core/README.txt

過去のSVNコミットを順にローカルリポジトリに取り込んでいるようです。