Module::Installを使ったプロジェクトのincディレクトリについて
Module::Installを使ったモジュールのプロジェクトを作るのは意外と簡単で、module-starterなどでプロジェクトの雛形を作り、以下のような感じでMakefile.PLをModule::Install用に書き換えてやるだけでいいのです(module-starterはテンプレート機能があるので、$HOME/.module-starter/の設定で最初からMakefile.PLをModule::Install用で出力することも可能)。
use strict; use warnings; use inc::Module::Install; name 'Sample::Module'; author 'Foo Bar <foo@example.com>'; all_from 'lib/Sample/Module.pm'; auto_install; WriteAll;
Makefile.PLをModule::Install用に書き換えたら、いつもCPANモジュールをインストールするときと同じようにperl Makefile.PLを実行すると、Makefileや前述のincディレクトリなどのインストールに必要なファイルが生成されるというわけです。
で、ここからが本題です。
他の人と同様に自分もモジュールを作る際にソースをsubversionで管理しているのですが、管理しているモジュールのリポジトリにincディレクトリがコミットしてあると、そのモジュールのデバッグ時にperl Makefile.PLとやることで毎回incディレクトリが再生成され、incディレクトリ内のsubversion用の.svnディレクトリが消されてしまいます。
当然この状態でsvn updateやsvn commitをすると、
% svn up svn: Directory 'inc/.svn' containing working copy admin area is missing
とか
% svn commit svn: Commit failed (details follow): svn: Directory '/path/to/inc/.svn' containing working copy admin area is missing
とおこられちゃいます。
なぜincディレクトリがperl Makefile.PLするごとに再生成されてしまうのかというと、incディレクトリに「.author」という空のディレクトリがあり、これがあることによってModule::Installがauthor mode(作成者モード)で動くため、毎回Makefile.PLの中身を判別して必要なModule::Installのモジュールをincディレクトリにコピーするためです(その辺はinc::Module::Installのperlpodに書いてあります)。
author mode でincディレクトリを再生成してくれるのはとてもありがたいのですが、「デバッグ→コミット→デバッグ→コミット」とスムーズな開発がしたいのに、毎回.svnが消されることにより「デバッグ→incディレクトリを消す→svn updateでincディレクトリを最新にする→コミット→デバッグ→incディレクトリを消す→svn updateでincディレクトリを最新にする→コミット」と、とてもめんどくさいことになってしまいます…。
ということで長々と書いてしまいましたが、モジュールのプロジェクトをsubversionで管理するときに、incディレクトリ内の.authorディレクトリまで管理した方がよいのか、それとも.authorディレクトリはsubversionで管理せずに必要な時に適宜自分で.authorディレクトリを生成してincディレクトリを再生成させた方がよいのか、どちらがいいのでしょうか。
このエントリを見ている人で、こうしてますっていう人がいたら是非教えてほしいです。
CodeReposとかみると、あんまりModule::Installを使ってる人がいないので、あんまりModule::Installって使われてないのかな?
→追記:http://unknownplace.org/memo/2007/10/12#e001 いくつかのモジュールを見て判断してしまいましたが、Module::Install使ってる人は結構いるようですね。失礼しました。