4

Subversion ダンプ ファイルで最も高いリビジョン番号を抽出したいと考えています。ファイルを 1 行ずつ解析する以外に、標準の perl (サーバーで追加のモジュールを許可しない) または bash シェル スクリプトを使用する、より簡単な (そしてできればより高速な) 方法はありますか?

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'

または、ファイル全体の grep を回避するには、tac (cat backs) を使用して、最初 (最後) の一致で停止します。grep の大きな出力の末尾が不要になり、処理時間が節約されます。

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 に答える