关于svn、git生成版本号脚本的再次改进

自从很久之前写了《SVN、GIT生成版本号》和《关于svn、git生成版本号脚本的改进》两篇文章后,自以为不会再修改了,结果却不如人意,里面的的脚本还是有bug,现在又要进行再次的修改。这个bug隐藏的比较深,而且要在一定场合下才出现。——其实最主要还是git和svn的判断方法有问题。

在低版本的svn(比如1.6),受控工程的所有目录下都会有.svn目录。而在高版本的svn中(比如1.8),只有顶层目录有一个.svn目录,其它子目录就没有了。假如要在子目录下生成版本号的话,就不能像之前那样判断.svn目录是否存在作为依据了。所以说,这是一个bug。

 

改进后的脚本如下:

 

# file name: local_ver_build.sh
# copyleft by Late Lee 2013~2014 

#!/bin/sh 

if [ $# != 2 ]
then
INC_DIR=.
FILENAME=version.h
else
INC_DIR=$1
FILENAME=$2
fi

VER_FILE=$INC_DIR/$FILENAME

GEN_DATE=`date +"built: %Y-%m-%d %k:%M:%S"`

# 读取Git版本号 
TESTGIT=`git rev-list HEAD`
if [ "$TESTGIT" != "" ]
then
GITLOCALVER=`git rev-list HEAD | wc -l | awk '{print $1}'`
echo "Git Local version:" $GITLOCALVER
GIT_VER=r$GITLOCALVER
GIT_VER="Git: $GIT_VER $(git rev-list HEAD -n 1 | cut -c 1-7)"
GIT_VERSION=$GIT_VER
VB_HASGITVER=1
else
echo "There is no Git version control."
VB_HASGITVER=0
fi

#读取SVN版本号 
# 根据不同的SVN版本得到仓库版本号 
VER16=`svn --version | grep "1\.6"`
VER17=`svn --version | grep "1\.7"`
VER18=`svn --version | grep "1\.8"`

if [ "$VER16" != "" ] ; then
SVNLOCALVER=`svn info | cat -n | awk '{if($1==5)print $3}'`
echo "1.6 version"
fi
if [ "$VER17" != "" ] ; then
SVNLOCALVER=`svn info | cat -n | awk '{if($1==6)print $3}'`
echo "1.7 version"
fi
if [ "$VER18" != "" ] ; then
SVNLOCALVER=`svn info | cat -n | awk '{if($1==7)print $3}'`
echo "1.8 version"
fi

if [ "$SVNLOCALVER" != "" ]
then
echo "SVN Local Version:" $SVNLOCALVER
SVN_VER=$SVNLOCALVER
SVN_VER="SVN: v$SVN_VER"
SVN_VERSION=$SVN_VER
VB_HASSVNVER=1
echo "ALL SVN Version:" $SVN_VERSION

else
echo "There is no SVN version control."
VB_HASSVNVER=0
fi

#生成版本信息文件 
if [ $VB_HASGITVER = 0 ] && [ $VB_HASSVNVER = 0 ]
then
echo "There isn't any version control."
else
echo "Generated:" $VER_FILE

echo "#ifndef PROJECT_VERSION_H" > $VER_FILE
echo "#define PROJECT_VERSION_H" >> $VER_FILE
echo "" >> $VER_FILE

if [ $VB_HASGITVER = 1 ] && [ $VB_HASSVNVER = 0 ]
then
echo "Git version add."
echo "#define VERSION_NUMBER \"$GIT_VERSION $GEN_DATE\"" >> $VER_FILE
fi

if [ $VB_HASGITVER = 0 ] && [ $VB_HASSVNVER = 1 ]
then
echo "SVN version add."
echo "#define VERSION_NUMBER \"$SVN_VERSION $GEN_DATE\"" >> $VER_FILE
fi

if [ $VB_HASGITVER = 1 ] && [ $VB_HASSVNVER = 1 ]
then
echo "Git&SVN version both add."
echo "#define VERSION_NUMBER \"$GIT_VERSION , $SVN_VERSION $GEN_DATE\"" >> $VER_FILE
fi

echo "" >> $VER_FILE
echo "#endif" >> $VER_FILE
fi

 

测试情况如下:
1、只有git仓库,没有svn仓库
./local_ver_build.sh
Git Local version: 32
svn: E155007: '/home/latelee/serial_test' is not a working copy
1.8 version
There is no SVN version control.
Generated: ./version.h
Git version add.


2、同时存在git仓库和svn仓库
./local_ver_build.sh
Git Local version: 32
1.8 version
SVN Local Version: 229
ALL SVN Version: SVN: v229
Generated: ./version.h

Git&SVN version both add.

 

李迟,记于2014年9月20日凌晨

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值