计算一个非常大的subversion存储库中的文件和目录

时间:2011-07-19 16:00:34

标签: perl svn

在工作中,我们有一个相当大的subversion存储库。作为内部监控的一部分,我们希望计算所有存储库中每个修订的所有文件和目录。问题是,其中一个有大约29000个修订版,包含大约300000个目录,有近400万个文件。我们以前的方法只是在perl脚本中使用'svnlook'命令的输出来计算所有内容。我已经尝试使用输出'svnlook changed'来构建一个计数,它大部分都有效,但是还有一些令人讨厌的猜测。作为旁注,repos托管在xen vm上,因此I / O性能有点问题。谁有更好的方法来做到这一点?

3 个答案:

答案 0 :(得分:1)

假设您正在谈论服务器端回购。

svn list -R --xml file:///svnrepos/myrepo | grep kind=\"file\" | wc -l

它不是很快,但它是准确的。

答案 1 :(得分:0)

我会研究svnadmin转储增量格式。我玩了一点,但基本上它是一个巨大的补丁类型文件,包含所有文件和所有修订版。它本质上是文本,因此使用像Perl这样的东西进行处理相对简单,而且与每次修改每个修订版本相比,它相当小。

您可能需要对所有文件进行表示(如果是400万,可能会使用SQLite)并在通过每个修订时更新它们。 delta按顺序进行修改,因此它应该相对简单。 (也许我很乐观。)

答案 2 :(得分:-1)

如下:

find /svndir | wc -l

Linux或Unix上的find输出为每个文件或目录生成一行,并且是递归的。将输出管道输出到“wc -l”以计算行数。