从Perl或shell中的subversion转储文件中获取最高版本号

时间:2011-04-07 14:03:13

标签: perl svn bash svn-administraton

我想在subversion转储文件中提取最高版本号。 除了逐行解析文件之外,使用标准perl(服务器上是否允许额外的模块)或bash shell脚本还有更简单(并且希望更快)的方式吗?

2 个答案:

答案 0 :(得分:10)

如果您使用

创建了转储文件
svnadmin dump /path/to/repo > Dump1.dump

您可以使用此单行找到最后一个修订号:

grep --binary-files=text "Revision-number" Dump1.dump | tail -n 1 | sed 's/Revision-number\:\ //g'

或者为了避免点击整个文件,请使用tac(cat backwards)并停止第一个(最后一个)匹配。消除了对grep的大输出尾部的需要,并节省了处理时间。

tac Dump1.dump | grep -m1 --binary-files=text "Revision-number" | sed 's/Revision-number\:\ //g'

答案 1 :(得分:3)

我可以通过简单地检入包含类似

之类的文本文件来破坏此解决方案,而不是双关语
Revision-number: 720

grep的输出如下所示:

-bash-3.2$ grep "Revision-number:" test.dump.2
Revision-number: 0
Revision-number: 1
Revision-number: 2
Revision-number: 720

要真正做到这一点,需要解析转储文件。我使用SVN :: Dumpfile模块编写了一个perl脚本,然后循环修改,直到我结束。

#!/usr/bin/perl
use SVN::Dumpfile;
use strict;

my $df = new SVN::Dumpfile;
$df->open('/usr/tmp/test.dump.2');

my $revision=-1;
while (my $node = $df->read_node()) {
  if ($node->is_rev) {
    $revision = $node->header('Revision-number');
  }
}

print "$revision\n";