Получить наибольший номер ревизии из файла дампа Subversion в Perl или shell - PullRequest
4 голосов
/ 07 апреля 2011

Я хотел бы извлечь самый большой номер ревизии в файле дампа Subversion.Помимо анализа файла построчно, есть ли более простой (и, надеюсь, более быстрый) способ использования стандартного perl (на сервере не допускаются дополнительные модули) или сценариев оболочки bash?

Ответы [ 2 ]

11 голосов
/ 14 июня 2011

, если вы создали файл дампа, используя

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

Номер последней ревизии можно найти с помощью одной строки:

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

Поочередно, чтобы не отображать весь файл,используйте tac (кот назад) и остановитесь на первом (последнем) матче.Устраняет необходимость в хвосте при большом выходе grep и экономит время обработки.

tac Dump1.dump | grep -m1 --binary-files=text "Revision-number" | sed 's/Revision-number\:\ //g'
3 голосов
/ 09 апреля 2012

Я могу подорвать это решение, не каламбур, просто отметив текстовый файл, который содержит что-то вроде

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

Чтобы действительно сделать это правильно, необходимо проанализировать файл дампа. Я написал Perl-скрипт, используя модуль SVN :: Dumpfile, и просто просматривал ревизии, пока не дошел до конца.

#!/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";
...