4

我想提取颠覆转储文件中的最高修订号。除了逐行解析文件之外,还有没有更简单(希望更快)的方法使用标准 perl(服务器上不允许有额外的模块)或 bash shell 脚本?

4

2 回答 2

12

如果您使用创建了转储文件

svnadmin dump /path/to/repo > Dump1.dump

你可以用这个单行找到最后一个修订号:

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

或者,为了避免对整个文件进行 grepping,请使用 tac(cat 向后)并在第一个(最后一个)匹配时停止。在 grep 的大输出上消除了 tail 的需要,并节省了处理时间。

tac Dump1.dump | grep -m1 --binary-files=text "Revision-number" | sed 's/Revision-number\:\ //g'
于 2011-06-14T10:40:45.490 回答
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";
于 2012-04-09T19:06:45.367 回答