.svn の削除方法なんて情報はゴミだ。Unixの初歩の初歩だし、こんなん。
「Pythonでmkdirhierとかrmtreeとかcp -r 的なこと」で、distutils の dir_util を紹介したのは良いのだけれど、こいつ、.svn とかを除外してくれるほど賢くはない。
そもそも論としては .svn が問題を起こすような場所からそんな行為をすること自体間違いだ、と、Mercurial に慣れてしまっている今はそう思うんだけど(トップレベルにしか .hg いないから)、なんか .svn ってサブツリーにもいたような記憶があって、それをさっきから調べたいんだけど、「削除方法」ばかりがワンサカ出てきて、ぷちコロ助やりたい気分だ。自宅じゃぁ Subversion なんぞ日常使いになんかしてないんで、確認しようにもすぐに確認でけん。(cvs はディレクトリごと。)
.svn がコピーされないようにすることは出来ないので、こんなことするしかない:
1 from distutils.dir_util import copy_tree
2 from distutils.dir_util import remove_tree
3 for copied in copy_tree("lib", "tests/lib"):
4 c = copied.replace("\\", "/")
5 if "/.svn" in c:
6 try:
7 remove_tree(os.path.dirname(c))
8 except:
9 pass
この例では「なぜか lib の直下に .svn がいる」として。で、こうなってくるともう dir_util がオイシイ、というほどでもなくなってきてな。
それはそうと、「.svnを削除」したり「.svnを除外」の目的が、「ソース配布物を作る」ことであるならば、「すわ、.svnを削除すべしぞ」は取り越し苦労。まず setup.py を公式ドキュメントに従って書く。それだけで、
1 me@host: ~$ python setup.py sdist --formats=gztar,zip
は自動的に .svn を除外したアーカイブを作ってくれる。
4月8日01:30追記: 確認できた。.svn はサブフォルダにも猛烈に出来上がる。ご苦労さまです。して、ご苦労かけやがって。しめばいいもみ。