Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I identify what branches exist in CVS?

I have a legacy CVS repository which shall be migrated to Perforce.

For each module, I need to identify what branches exist in that module.

I just want a list of branch names, no tags. It must be a command line tool, for scripting reasons.

For example (assuming there is a cvs-list-branches.sh script):

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

2 Answers

As a quick hack:) The same stands true for rlog.

cvs log -h | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | sort -u

Improved version as per bdevay, hiding irrelevant output and left-aligning the result:

cvs log -h 2>&1 | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | awk '{print $1}' | sort -u

You could simply parse log output of cvs log -h. For each file there will be a section named Symbolic names :. All tags listed there that have a revision number that contains a zero as the last but one digit are branches. 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 :

===============================================

In this example Maintenance-BRANCH is clearly a branch because its revision number is listed as 1.1.0.2. This is also sometimes called a magic branch revision number.

like image 32
Oliver Giesen Avatar answered Sep 14 '25 15:09

Oliver Giesen