Email: Takayama Fumihiko <tekezo@pqrs.org>

[FsFilter] Subversion のためのファイルシステムフィルタ

ダウンロード使い方ドキュメント

はじめに

FsFilter とは?

これは Linux や FreeBSD 上で動く、ファイルシステムフィルタです。

Subversion や CVS といったバージョン管理ツールを使っていると、 .svn や CVS といったディレクトリが自動的に作成されます。
これらのディレクトリはバージョン管理システムにとっては重要なファイルですが、 人間が閲覧するためのファイルではありません。

特に find や grep を使う際には .svn 以下のファイルがノイズとなり、 人間にとって不必要なだけでなく邪魔になることも多いと思います。

そこで FsFilter ではユーザから .svn ディレクトリを隠蔽することで、 Subversion のワーキングスペース上での作業を快適にします。

どんな風に動くの?

動作原理

FsFilter は readdir(3) や readdir64(3) を LD_PRELOAD でフックして .svn ディレクトリを読み飛ばすことで、 .svn ディレクトリの隠蔽を行います。

そのため、 find, grep, diff, ls, cp, mv, ... など、一般的なコマンド全てに対して .svn の隠蔽を行えます。

また、 svn コマンドについては readdir(3) を使わずに .svn ディレクトリにアクセスするため、 FsFilter を使って .svn を隠蔽している状態でも svn コマンドは問題なく動きます。

動作の例

FsFilter 導入前 FsFilter 導入後
% find utils
utils
utils/.svn
utils/.svn/tmp
utils/.svn/tmp/props
utils/.svn/tmp/text-base
utils/.svn/tmp/prop-base
utils/.svn/tmp/wcprops
utils/.svn/props
utils/.svn/props/make-setenv.sh.svn-work
utils/.svn/empty-file
utils/.svn/entries
utils/.svn/format
utils/.svn/text-base
utils/.svn/text-base/Makefile.svn-base
utils/.svn/text-base/make-setenv.sh.svn-base
utils/.svn/README.txt
utils/.svn/prop-base
utils/.svn/prop-base/make-setenv.sh.svn-base
utils/.svn/wcprops
utils/Makefile
utils/make-setenv.sh
かなりすっきりします

arrow.png
% find utils
utils
utils/Makefile
utils/make-setenv.sh
% svn status utils
?      utils/touchtest
svn コマンドはちゃんと動作します

arrow.png
% svn status utils
?      utils/touchtest

弱点

.svn を含むディレクトリを削除しようとした際に、一見ディレクトリが空にもかかわらず Directory not empty と言われます。

% mkdir -p test/.svn
% ls -a test
.  ..
% rm -r test/
rm: cannot remove directory `test/': Directory not empty

そのため、 rm -r を行うときは LD_PRELOAD を無効化してから削除を実行してください。

% LD_PRELOAD= rm -r test


Comments for This Page.
Date: 2006-06-19 00:00 (JST)