Подтвердить что ты не робот

Как определить, какие ветки существуют в CVS?

У меня есть старый CVS-репозиторий, который должен быть перенесен в Perforce.

Для каждого модуля мне нужно определить, какие ветки существуют в этом модуле.

Мне просто нужен список имен ветвей, никаких тегов. Это может быть инструмент командной строки для объяснения причин.

Например (предполагается, что существует cvs -list-branches.sh script):

$ ./cvs-list-branches.sh module1
HEAD
dev_foobar
Release_1_2
Release_1_3
$
4b9b3361

Ответ 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
}