Как получить содержимое файлов за последний день в 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 ....