2012-06-04 2 views
1

При подготовке к миграции в Mercurial я хотел бы внести некоторые систематические изменения во многие тысячи, v файлов. (Я буду редактировать копии оригиналов, я спешу добавить.)Сценарий для настройки истории в RCS/CVS, v файл

Примеры сортов изменений я после:

  1. Для каждого пересмотра сообщение которого начинается с какой-нибудь текст, который указывает на (например, [Fred Bloggs]), если имя пользователя в комментарии совпадает с Автором в файле v, затем удалите ненужный текст имени пользователя из сообщения о фиксации.
  2. Если значение v содержит полезное описание, добавьте его в сообщение фиксации для версии 1.1 (cvs2hg игнорирует описание), но многие из наших CVS-файлов действительно поступали из RCS, где было легко помещать начальное сообщение фиксации в описание поле по ошибке)
  3. Для редактирования, сделанного из определенных общих учетных записей пользователей, настройте автора в зависимости от содержимого сообщения фиксации.

Вещей Я рассмотрел:

  1. Запуск 'журнал CVS' на каждом человек, v файл - разбор вывода, и с помощью rcs -m изменить эту историю. Проблемы с этим включают в себя:
    • не существует способа передать текстовый файл в rcs -m - так что если сообщение о пересмотре содержало выделенные и/или или двойные кавычки или охватывало несколько строк, это было бы довольно вызов, правильно цитирующий его в сценарии
    • Я не вижу средство rcs или cvs для изменения имени автора, связанного с пересмотром
    • Менее важным было бы начать огромное количество процессов, которые, я думаю, может стать медленным
  2. Написание Python для анализа ,v file и корректировки е содержание. Проблемы с этим включают в себя:
    • У нас есть смесь строк в наших V-файлах, в том числе некоторые двоичные файлы, которые должны были быть текстом, и наоборот - так бы требовалась большая осторожность, чтобы не повредить файлы.
    • Необходимо было бы позаботиться о цитировании символа @ в любых сообщениях фиксации, если он упал на начало строки в многострочном комментарии
    • уход также понадобился бы при пересмотрах, когда последняя строка зафиксированного файла был изменен и не имеет новой строки - это означает, что v имеет @ в самом конце строки, вместо того, чтобы предшествовать \n
  3. Clone версия cvs2hg, что мы используем, и попытаться настроить свой код, чтобы сделать необходимые изменения в месте

Существуют ли какие-либо другие подходы, которые были бы меньше работы, или любой существующий код, который реализует этот вид функциональности?

ответ

2

Ваш первый подход может быть лучшим. Я знаю, что в Perl обработка кавычек и нескольких строк не будет проблемой.Например:

my $revision = ...; 
my $log_message = ...; 
system('rcs', "-m$revision:$log_message", $filename); 

где $log_message может содержать любой текст. Поскольку строка не проходит через оболочку, символы новой строки и другие метасимволы не будут интерпретироваться повторно. Я уверен, что вы можете сделать то же самое в Python.

(Что касается второго подхода, я бы не стал ожидать окончание строк, чтобы быть проблемой. Если у вас есть Unix-стиль \n окончаний и для Windows-стиль \r\n окончаний, вы можете рассматривать заднюю \r как часть линии , и все должно оставаться последовательным. Я делаю некоторые предположения здесь о макете файлов ,v.)

+0

Спасибо - два очень полезных предложения. –

Смежные вопросы