Как узнать, какие теги CVS охватывают какие файлы и пути к ним?
-
09-06-2019 - |
Вопрос
Существует устаревший репозиторий CVS, который содержит большое количество каталогов, подкаталогов и путей.Существует также большое количество ветвей и тегов, которые необязательно охватывают все пути и файлы - обычно это подмножество.Как я могу узнать, какая ветка / тег охватывает, какие файлы и пути?
Журнал CVS уже предоставляет список тегов для каждого файла.Задача требует, чтобы я перенес это в файлы для каждого тега.Я не смог найти такую функциональность в текущей реализации WinCvs (CVSNT).Учитывая достаточное количество пустых циклов, я могу написать Perl-скрипт, который бы это делал, алгоритм не сложный, но его нужно выполнить.
Я бы предположил, что есть несколько человек, которые нуждались в такой информации и решили эту проблему.Таким образом, я думаю, что для этого должен быть легкодоступный инструмент (с открытым исходным кодом / бесплатный).
Решение
Чтобы определить, какие теги применяются к конкретному файлу, используйте:
cvs log <filename>
При этом будут выведены все версии файла и то, какие теги были применены к этой версии.
Чтобы определить, какие файлы включены в один тег, единственное, что я могу придумать, - это проверить использование тега и посмотреть, какие файлы возвращаются.Командой для этого является любой из:
cvs update -r <tagname>
cvs co <modulename> -r <tagname>
cvs export <modulename> -r <tagname>
Другие советы
Чтобы перечислить теги в файле, можно также сделать:
cvs status -v <file>
приведенный выше метод у меня не сработал
резюме -q rdiff -s -D 2000-01-01 -r Ваше имя
однако после долгой возни я понял, что
cvs -q rdiff -s -D 2000-01-01 -r Имя вашего модуля
работает
Вам не обязательно оформлять заказ на самом деле.Вы можете использовать опцию -n только для имитации этого:
cvs -n co -rTagName ModuleName
Это даст вам имена всех файлов с тегом tagName в модуле ModuleName.
Следующая команда выдает список файлов, которые находятся в этом теге "yourTagName".Все файлы помечены как новые, информация о редакции указана в "yourTagName".
Эта команда выполняет различие между 2000-01-01 и вашим тегом, не стесняйтесь использовать другую дату, которая более ранняя.
cvs -q rdiff -s -D 2000-01-01 -r yourTagName
Я не знаю ни одного инструмента, который мог бы вам помочь, но если вы пишете свой собственный, я могу избавить вас от одной неприятности:Каталоги в CVS не могут быть помечены тегами.Только файлы внутри них имеют теги (и именно это определяет, что извлекается при извлечении каталога по определенному тегу).