Как определить, какие ветки существуют в CVS?
У меня есть старый CVS-репозиторий, который должен быть перенесен в Perforce.
Для каждого модуля мне нужно определить, какие ветки существуют в этом модуле.
Мне просто нужен список имен ветвей, никаких тегов.
Это может быть инструмент командной строки для объяснения причин.
Например (предполагается, что существует cvs -list-branches.sh script):
$ ./cvs-list-branches.sh module1
HEAD
dev_foobar
Release_1_2
Release_1_3
$
Ответы
Ответ 1
Как быстрый взлом:) То же самое верно для rlog.
cvs log -h | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | sort -u
Улучшена версия по bdevay, скрывая нерелевантный вывод и выравнивая результат слева:
cvs log -h 2>&1 | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | awk '{print $1}' | sort -u
Ответ 2
Вы можете просто проанализировать вывод журнала cvs log -h
. Для каждого файла будет раздел с именем Symbolic names :
. Все теги, перечисленные там, у которых есть номер редакции, который содержит ноль в качестве последней, но одной цифры, являются ветвями. Например:.
$ cvs log -h
Rcs file : '/cvsroot/Module/File.pas,v'
Working file : 'File.pas'
Head revision : 1.1
Branch revision :
Locks : strict
Access :
Symbolic names :
1.1 : 'Release-1-0'
1.1.2.4 : 'Release-1-1'
1.1.0.2 : 'Maintenance-BRANCH'
Keyword substitution : 'kv'
Total revisions : 5
Selected revisions : 0
Description :
===============================================
В этом примере Maintenance-BRANCH
явно является ветвью, потому что его номер версии указан как 1.1. 0.2. Это также иногда называют номером ревизии магической ветки.
Ответ 3
Это также приведет к созданию тегов, но теги и ветки в CVS будут в основном одинаковыми.
$cvs.exe rlog -h -l -b module1
Ответ 4
с Wincvs (клиент Gui для окон) это тривиально, правый щелчок даст вам любые ветки и теги, которые имеют файлы.
Через оболочку вы можете использовать cvs log -h -l module.
Ответ 5
У меня есть небольшая коллекция "удобных" функций оболочки korn, одна из которых извлекает теги для данного файла. Я быстро попытался адаптировать его, чтобы делать то, что вы хотите. Он просто выполняет седирование/сглаживание вывода журнала (r) и перечисляет версии с ".0". в них (что указывает, что это тег ветки):
get_branch_tags()
{
typeset FILE_PATH=$1
TEMP_TAGS_INFO=/tmp/cvsinfo$$
/usr/local/bin/cvs rlog $FILE_PATH 1>${TEMP_TAGS_INFO} 2>/dev/null
TEMPTAGS=`sed -n '/symbolic names:/,/keyword substitution:/p' ${TEMP_TAGS_INFO} | grep "\.0\." | cut -d: -f1 | awk '{print $1}'`
TAGS=`echo $TEMPTAGS | tr ' ' '/'`
echo ${TAGS:-NONE}
rm -Rf $TEMP_TAGS_INFO 2>/dev/null 1>&2
}