首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Perl或shell中的subversion转储文件中获取最高修订号

从Perl或shell中的subversion转储文件中获取最高修订号
EN

Stack Overflow用户
提问于 2011-04-07 22:03:13
回答 2查看 3.3K关注 0票数 4

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-14 18:40:45

如果使用以下命令创建转储文件

代码语言:javascript
运行
复制
svnadmin dump /path/to/repo > Dump1.dump

您可以使用以下一行代码找到最新的修订号:

代码语言:javascript
运行
复制
grep --binary-files=text "Revision-number" Dump1.dump | tail -n 1 | sed 's/Revision-number\:\ //g'

或者,为了避免弄脏整个文件,可以使用tac (后退的cat),并在第一个(最后一个)匹配时停止。在grep的大量输出中消除了对结尾的需要,并节省了处理时间。

代码语言:javascript
运行
复制
tac Dump1.dump | grep -m1 --binary-files=text "Revision-number" | sed 's/Revision-number\:\ //g'
票数 12
EN

Stack Overflow用户

发布于 2012-04-10 03:06:45

我可以通过简单地签入一个包含以下内容的文本文件来颠覆这个解决方案,不是有意使用双关语

代码语言:javascript
运行
复制
Revision-number: 720

grep的输出如下所示:

代码语言:javascript
运行
复制
-bash-3.2$ grep "Revision-number:" test.dump.2
Revision-number: 0
Revision-number: 1
Revision-number: 2
Revision-number: 720

要真正正确地执行此操作,需要对转储文件进行解析。我使用SVN::Dumpfile模块编写了一个perl脚本,然后循环修改,直到读完为止。

代码语言:javascript
运行
复制
#!/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";
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5582388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档