web-dev-qa-db-ja.com

CVSに存在するブランチを特定するにはどうすればよいですか?

PERFORCEに移行するレガシーCVSリポジトリがあります。

モジュールごとに、そのモジュールに存在するブランチを特定する必要があります。

タグなしで、ブランチ名のリストが必要です。スクリプト上の理由から、コマンドラインツールである必要があります。

例(cvs-list-branches.shスクリプトがあると仮定):

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

簡単なハックとして:)同じことが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
25
user332325

cvs log -hのログ出力を単純に解析できます。ファイルごとに、Symbolic names :という名前のセクションがあります。そこにリストされている、最後の1桁がゼロを含むリビジョン番号を持つすべてのタグはブランチです。例えば。:

$ 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としてリストされているため、明らかにブランチです。。2。これは、magicブランチリビジョン番号と呼ばれることもあります。

15
Oliver Giesen

これによりタグも表示されますが、タグとブランチは基本的にCVSで同じです。

$cvs.exe rlog -h -l -b module1
4
Kris Erickson

「便利な」kornShell関数の小さなコレクションがあり、そのうちの1つが特定のファイルのタグをフェッチします。私はあなたが望むことをするためにそれを適応させるために迅速な試みをしました。 (r)log出力のseding/grepingを実行し、「。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
}
1
Tom Duckering

wincvs(Windows用のGuiクライアント)では、これは簡単です。右クリックすると、ファイルにあるブランチとタグが表示されます。

シェルを介して、cvs log -h-lモジュールを使用できます。

0
Decio Lira