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