Как мне определить, какие ветви существуют в CVS? - PullRequest
23 голосов
/ 19 февраля 2009

У меня есть устаревшее хранилище CVS, которое необходимо перенести в Perforce.

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

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

Например (при условии, что есть скрипт cvs-list-branches.sh):

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

Ответы [ 5 ]

25 голосов
/ 04 мая 2010

Как быстрый взлом :) То же самое относится и к 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
15 голосов
/ 20 февраля 2009

Вы можете просто проанализировать вывод журнала cvs log -h. Для каждого файла будет раздел с именем Symbolic names :. Все перечисленные там теги с номером ревизии, который содержит ноль в качестве последней, но одну цифру, являются ветвями. E.g.:

$ 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. Это также иногда называют магическим номером редакции ветви.

4 голосов
/ 19 февраля 2009

Это также вызовет теги, но теги и ветви в CVS практически одинаковы.

$cvs.exe rlog -h -l -b module1
0 голосов
/ 09 апреля 2009

У меня есть небольшая коллекция «удобных» функций оболочки 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
}
0 голосов
/ 19 февраля 2009

с Wincvs (клиент Gui для Windows) это тривиально, щелчок правой кнопкой мыши даст вам любые ветви и теги, которые есть у файлов.

Через оболочку вы можете использовать модуль cvs log -h -l.

...