Как получить содержимое файлов за последний день в CVS?

Мне нужно проверить содержимое всех заархивированных файлов CVS за последний день на наличие определенных выражений в коде и сообщить об этом своему коммиттеру.

Для этого мне нужно получить содержимое файлов, но я могу получить только список подтвержденных файлов с другими очевидными атрибутами. Команда, которую я использовал для этого

cvs history -a -c -D <today's date> > cvs_history.txt

Есть ли способ, которым я мог бы изменить команду, чтобы я мог получить то, что мне нужно? Или мне придется проанализировать выходной файл истории и извлечь все упомянутые файлы, чтобы я мог их найти? Какой самый эффективный способ сделать это?

NB. Я пишу это в скрипте Ant (если это как-то облегчит задачу).

Спасибо якуб

Редактировать:

Мне нужно делать это каждую ночь для всех коммитов в компании (список пользователей постоянно меняется).

После некоторых исследований команд CVS мне, вероятно, придется history список и получить rdiff для каждого файла из списка (интересует только добавленный код). И позвонить rdiffЯ должен знать ревизии: последняя ревизия от history и это предыдущий из rlog - это немного сложнее, потому что мне нужно учитывать и ревизии веток. Все это нужно будет склеить вместе со скриптом Perl с помощью регулярных выражений, и это в конечном итоге объединит его в нужный мне результат.

Я думаю, что это сделает, но это может занять много времени для большого количества коммитов. Может ли быть проще?

2 ответа

Решение

Итак, чтобы ответить на мой вопрос, когда единственное, что мне было нужно, было зафиксированное содержимое последнего дня, я создал Perl-скрипт, который вызывает

cvs history -a -c -D $today

и сохраняет вывод в файл commit-log.txt (это может не понадобиться, но я просто сделал это для экономии памяти). Затем я просто обрабатываю файл commit-log.txt и выбираю только файлы из моего домена. На эти я звоню

cvs rdiff -r $prevRev -r $revision -u $repoName/$file

где $prevRev - это просто lastDigit($revision) - 1. Это просто дает мне разностное содержимое, поэтому я добавляю его в отчет и обрабатываю его тогда, когда мне нужно (поиск нежелательных выражений...).

если бы я хотел получить все содержимое файла, я бы просто использовал первое $firstRevision (может быть 1.1 или 1.0) вместо $prevRev в приведенной выше команде.

Кроме того, для интереса нам хотелось бы видеть в отчете название ветви вместо номера редакции. Поэтому я использую выход "rlog" так же, как и выше, и извлекаю имя ветки, связанное с подтвержденным номером ревизии.

Спасибо за интерес и предложения ребята; о)

Если у вас ограниченный набор пользователей, вы можете запустить команду истории для каждого пользователя и объединить вывод.

cvs history -u username ....
Другие вопросы по тегам