0
我在CVS中使用不同標籤的許多模塊。我將如何去獲取這些標記文件存在的分支的名稱?我已經嘗試使用cvs co -r TAG
從模塊中檢出文件,然後執行cvs log
,但它似乎給出了該文件存在的所有分支的列表,而不僅僅是一個分支名稱。標籤名稱的CVS分支名稱
此外,這需要一個自動化的過程,所以我不能使用基於Web的工具,如viewvc來收集這些信息。
我在CVS中使用不同標籤的許多模塊。我將如何去獲取這些標記文件存在的分支的名稱?我已經嘗試使用cvs co -r TAG
從模塊中檢出文件,然後執行cvs log
,但它似乎給出了該文件存在的所有分支的列表,而不僅僅是一個分支名稱。標籤名稱的CVS分支名稱
此外,這需要一個自動化的過程,所以我不能使用基於Web的工具,如viewvc來收集這些信息。
我有以下Korn函數,您可能可以調整在bash中運行。應該很明顯它在做什麼。使用get_ver()
來確定文件路徑和給定標籤的版本號。然後將文件路徑和版本號傳遞給get_branch_name()
。 get_branch_name()
函數依賴於一些其他幫助程序來獲取信息並切分版本號。
get_ver()
{
typeset FILE_PATH=$1
typeset TAG=$2
TEMPINFO=/tmp/cvsinfo$$
/usr/local/bin/cvs rlog -r$TAG $FILE_PATH 1>$TEMPINFO 2>/dev/null
VER_LINE=`grep "^revision" $TEMPINFO | awk '{print $2}'`
echo ${VER_LINE:-NONE}
rm -Rf $TEMPINFO 2>/dev/null 1>&2
}
get_branch_name()
{
typeset FILE=$1
typeset VER=$2
BRANCH_TYPE=`is_branch $VER`
if [[ $BRANCH_TYPE = "BRANCH" ]]
then
BRANCH_ID=`get_branch_id $VER`
BRANCH_NAME=`get_tags $FILE $BRANCH_ID`
echo $BRANCH_NAME
else
echo $BRANCH_TYPE
fi
}
get_minor_ver()
{
typeset VER=$1
END=`echo $VER | sed 's/.*\.\([0-9]*\)/\1/g'`
echo $END
}
get_major_ver()
{
typeset VER=$1
START=`echo $VER | sed 's/\(.*\.\)[0-9]*/\1/g'`
echo $START
}
is_branch()
{
typeset VER=$1
# We can work out if something is branched by looking at the version number.
# If it has only two parts (i.e. 1.123) then it's on the trunk
# If it has more parts (i.e. 1.2.2.4) then it's on the branch
# We can error detect if it has an odd number of parts
POINTS=`echo $VER | tr -dc "." | wc -c | awk '{print $1}'`
PARTS=$(($POINTS + 1))
if [[ $PARTS -eq 2 ]]
then
print "TRUNK"
elif [[ $(($PARTS % 2)) -eq 0 ]]
then
print "BRANCH"
else
print "ERROR"
fi
}
get_branch_id()
{
typeset VER=$1
MAJOR_VER=`get_major_ver $VER`
MAJOR_VER=${MAJOR_VER%.}
BRANCH_NUMBER=`get_minor_ver $MAJOR_VER`
BRANCH_POINT=`get_major_ver $MAJOR_VER`
echo ${BRANCH_POINT}0.${BRANCH_NUMBER}
}
get_tags()
{
typeset FILE_PATH=$1
typeset VER=$2
TEMP_TAGS_INFO=/tmp/cvsinfo$$
cvs rlog -r$VER $FILE_PATH 1>${TEMP_TAGS_INFO} 2>/dev/null
TEMPTAGS=`sed -n '/symbolic names:/,/keyword substitution:/p' ${TEMP_TAGS_INFO} | grep ": ${VER}$" | cut -d: -f1 | awk '{print $1}'`
TAGS=`echo $TEMPTAGS | tr ' ' '/'`
echo ${TAGS:-NONE}
rm -Rf $TEMP_TAGS_INFO 2>/dev/null 1>&2
}