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

前端 未结 5 1860
故里飘歌
故里飘歌 2021-02-12 14:54

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 ne

5条回答
  •  面向向阳花
    2021-02-12 15:08

    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
    

提交回复
热议问题