Как получить файлы CVS / * без проверки реальных файлов? - PullRequest
0 голосов
/ 11 января 2012

Мои сценарии зависят от файлов CVS / *, но фактически не требуют наличия всех файлов.Можно ли просто получить файлы CVS / * без проверки всех файлов из хранилища?Проверка всех файлов стоит много времени.

Ответы [ 2 ]

1 голос
/ 13 января 2012

В настоящее время выполняется сравнение только двух файлов Entries из разных тегов и выводится XML / JSON или информация, удобная для чтения человеком, с разницей между тегами: удалено, новое, пересмотр вниз, пересмотр вверх- davidlt

Есть несколько проблем с вашим подходом.Вы уже знаете о первом: необходимости проверять теги, даже если вас не интересуют реальные файлы.

Другая проблема заключается в том, что файлы CVS / * являются локальными и могут быть отредактированы и / илиповрежден.Также, если вы делаете частичную проверку, файл Entries будет содержать только содержимое, которое вы извлекли, а не все, что связано с тегом.Следовательно, этот файл не может быть гарантирован как источник "правды".

Если вы только после того, какие файлы были изменены, вы можете использовать опцию rdiff -s.

rdiff options документация гласит:

-s

Создать сводный отчет об изменениях вместо патча.Сводка содержит информацию о файлах, которые были изменены или добавлены между выпусками.Отправляется на стандартное устройство вывода.Это полезно для определения, например, файлов, которые изменились между двумя датами или ревизиями.

Документация также содержит этот пример :

Предположим, вы сделали релиз 1.3 и разветвили ветку R_1_3fix для исправления ошибок.R_1_3_1 соответствует версии 1.3.1, которая была сделана некоторое время назад.Теперь вы хотите увидеть, сколько разработок было сделано в отрасли.Эту команду можно использовать:

$ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
cvs rdiff: Diffing module-name
File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6
File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4
File bar.h,v changed from revision 1.29.2.1 to 1.2

Я сам ее запустил и вот как выглядят новые и удаленные сообщения:

cvs rdiff -s -r v5_8_0_1 -r v5_8_0_2 <module>

File abc is new; v5_8_0_2 revision 1.1.2.2
File xyz is removed; v5_8_0_1 revision 1.1.4.1

РЕДАКТИРОВАТЬ:

Вы не указываете, на какой платформе вы находитесь, но неоднородный вывод команды cvs, безусловно, может быть пропущен через команду очистки, чтобы упростить управление.например.Следующий awk превратит его в вывод CSV только с четырьмя интересующими вас частями информации.

cvs rdiff -s -r <tag1> -r <tag2> <module> | awk '
    / new; /     { print "NEW, \"" $2 "\", , " $7 }
    /changed /   { print "CHANGED, \"" $2 "\", " $6 ", " $8 }
    / removed; / { print "REMOVED, \"" $2 "\", " $7 ", " }
'
0 голосов
/ 11 января 2012

Вы имеете в виду эти файлы:

CVS/Entries
CVS/Repository
CVS/Root
CVS/Tag

Это частичное решение:

cvs ... checkout -D 1970-01-01 ...

Это проверяет самые последние версии не позднее 1 января 1970 года, из которых естьпочти наверняка нет.

Но он только проверяет каталог верхнего уровня.Если вы хотите рекурсивно получить все подкаталоги, все становится немного сложнее.Ключ заключается в том, что cvs checkout выводит имена подкаталогов на stderr, даже если он их не создает.

Так что этот скрипт оболочки, похоже, делает свое дело (замените ... на что угоднонужно):

#!/bin/bash

export CVSROOT=...
module=...

for dir in $(cvs checkout -D 1970-01-01 $module 2>&1 | sed 's/.* //')
do
    cvs checkout -D 1970-01-01 $dir
done

Я не совсем доволен этим решением, поскольку оно основано на наблюдаемом поведении, а не на задокументированном поведении.Также может произойти сбой, если имя какого-либо модуля или каталога содержит пробел.

РЕДАКТИРОВАТЬ: Как отмечает Клэр Макрэй в комментарии, это создает почти пустые файлы CVS/Entries (только содержащие записидля каталогов), так что это может не соответствовать вашим целям.

Не может быть способа сделать то, что вы хотите.CVS бесплатное ;Вы можете взломать источники.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...