[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 |
かなりすっきりします
![]() |
% find utils utils utils/Makefile utils/make-setenv.sh |
% svn status utils ? utils/touchtest |
svn コマンドはちゃんと動作します
![]() |
% 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)
English
日本語 (Japanese)