Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get a list of tags created in CVS repository?

Are there any CLI commands that can be used to get a list of Tags that have been created on a branch or head of a module within a specified time frame?

What I briefly need is a list of Tags and the date when they were created. Given following parameters

  1. Module Name
  2. Branch Name (or :: HEAD)
  3. Start Date
  4. End Date
like image 421
Salman A. Kagzi Avatar asked May 30 '11 09:05

Salman A. Kagzi


People also ask

How do I checkout a CVS repository?

Use “cvs checkout” giving the name of the directory in the cvs repository you want to checkout, where the name you give is a directory under CVSROOT, presently $CD_SOFT/cvs (eg app/alh, script). The directory you give, and all subdirectories, will be placed in your working directory.

How do I create a branch in CVS?

Making a Branch You can make a branch with the -b option to the cvs tag or cvs rtag commands. This option can be combined with any of the other tag-creation options of those commands. You can use a date, existing tag, or revision number to specify the revision to be branched from.


2 Answers

I just learned:

cvs status -v

Lists all tags and braches for each and any file together with the revision it belongs to.

You could work from there ...

like image 122
Thomas Avatar answered Sep 18 '22 06:09

Thomas


One can list tags or branches present in a module using the following command. This is something picked up from another answer at SO

To list all tags:

cvs -Q -d :pserver:*User*:*Pass*@*HostName*:/cvsroot rlog -h *Module*| awk -F"[.:]" '/^\t/&&$(NF-1)!=0{print $1}' | sort -u

To List all branches:

cvs -Q -d :pserver:*User*:*Pass*@*HostName*:/cvsroot rlog -h *Module*| awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | sort -u

This uses the magic branch numbers to identify is a symbolic link is a branch or a tag.

As skaffman mentioned in one of the answers on this page, it is not possible to determine date when tag is created. The best one can do is to identify an approximate date by considering the most recent date listed in the logs for that tag.

Something like this:

cvs -Q -d :pserver:*User*:*Pass*@*HostName*:/cvsroot rlog -N -S -r*TagName* *Module* | grep ^date: | sort | tail -1 | cut -d\; -f1 | sed -e 's/date: //'

This is a bash script I worked out to give list of all tags with their approx. creation date

#!/bin/bash

CVSROOT=$1
PROTOCOL=$2
LOGIN=$3
PASSWORD=$4
MODULE=$5
REVISION=$6
OUTPUT=$7

CVS_HOST=""
if test "${PASSWORD:-t}" != "t" ; then
    CVS_HOST=":${PROTOCOL}:${LOGIN}:${PASSWORD}@${CVSROOT}"
else
    CVS_HOST=":${PROTOCOL}:${LOGIN}@${CVSROOT}"
fi

CVS_REVISION=""
if test "${REVISION:-t}" != "t" ; then
    CVS_REVISION="-r${REVISION}"
fi

echo "\"Tag Name\",\"Create Date\"" > ${OUTPUT}

echo "EXEC: cvs -Q -d ${CVS_HOST} rlog -h -S ${CVS_REVISION} ${MODULE} | awk -F"[.:]" '/^\t/&&\$(NF-1)!=0{print \$1}' | sort -u"
cvs -Q -d ${CVS_HOST} rlog -h ${CVS_REVISION} ${MODULE} | awk -F"[.:]" '/^\t/&&\$(NF-1)!=0{print $1}' | sort -u | while read tagName
do
    #get approx create date
    echo "EXEC: cvs -Q -d ${CVS_HOST} rlog -N -S -r$tagName ${MODULE} | grep ^date: | sort | tail -1 | cut -d\; -f1 | sed -e 's/date: //'"
    date=`cvs -Q -d ${CVS_HOST} rlog -N -S -r$tagName ${MODULE} | grep ^date: | sort | tail -1 | cut -d\; -f1 | sed -e 's/date: //'`

    #Save to output file
    echo "\"$tagName\",\"$date\"" >> ${OUTPUT}
done
like image 38
Salman A. Kagzi Avatar answered Sep 19 '22 06:09

Salman A. Kagzi