[python]自动生成版本号

本文适用于使用Subversion版本控制的读者.

      前一段时间研究了一下TortoiseSVN的源代码 , 发现它使用 Nant+SubWCRev.exe 来自动生成版本号的. SubWCRev.exe 是TortoiseSVN下的一个命令行工具, 安装了TortoiseSVN 就找到它. 这里补充一下TortoiseSVN的版本号命名方式, 它的版本号是: 主版本号(MajorVersion).从版本号(MinorVersion).小版本号(MicroVersion)  build  svn代码库的修订版本号, 其中主版本号(MajorVersion),  从版本号(MinorVersion), 小版本号(MicroVersion) 是通过配置文件固定的.

     在前一个项目中, 我用的就是TortoiseSVN的这种方式来自动生成版本号. 后来我想把它也移植到linux下, 刚开始时遇到了问题,  就改用python + pysvn 来实现这个功能. 以下是代码:

MakeVersion.py 是实现代码

# --*-- coding:cp936 --*--

"""
@file: MakeVersion.py
    自动生成版本号
@author: riag 
@contract: [email protected], http://blog.csdn.net/riag
@version: 0.12
@attention: 需要安装pysvn模块
"""


import  pysvn
import  sys
import  os
import  time
from  string  import  Template
import  traceback
import  VersionConf

VersionText 
=   """  
 #define FILEVER        ${MajorVersion},${MinorVersion},${MicroVersion},${WCREV}
 #define PRODUCTVER     ${MajorVersion},${MinorVersion},${MicroVersion},${WCREV}
 #define STRFILEVER     "${MajorVersion}, ${MinorVersion}, ${MicroVersion}, ${WCREV}/0"
 #define STRPRODUCTVER  "${MajorVersion}, ${MinorVersion}, ${MicroVersion}, ${WCREV}/0"
 
 #define VERMAJOR             ${MajorVersion}
 #define VERMINOR             ${MinorVersion}
 #define VERMICRO             ${MicroVersion}
 #define VERBUILD              ${WCREV}


 #define BUILDNUMBER         "${MajorVersion}.${MinorVersion}.${MicroVersion}, build ${WCREV}"
 #define VERDATE              "${WCDATE}"
 #define BUILDTIME              ${BuildTime}
 
"""

if   __name__ == " __main__ " :
    
    
if  len(sys.argv)  ==   2  :
        SVNReposPath 
=  sys.argv[ 1 ]
    
else : SVNReposPath  =  os.getcwd() ;
    
    
try :
        MajorVersion 
=  VersionConf.MajorVersion
        MinorVersion 
=  VersionConf.MinorVersion
        MicroVersion 
=  VersionConf.MicroVersion
    
    
        client 
=  pysvn.Client()
    
        LogList 
=  client.log(SVNReposPath, limit = 1  )
        ReposInfo 
=  LogList[0]

        ReposRevNumber 
=  ReposInfo.revision.number
    
    
     
        ReposComitTime 
=  time.strftime( " %Y/%m/%d %H:%M:%S " , time.localtime(ReposInfo.date)) ;
        BuildTime 
=   " " "   +  time.strftime( " %Y/%m/%d %H:%M:%S " , time.localtime())  +   " " "  ;
    
        
try :
            os.remove(
" version.h " ) ;
        
except pass
    
        
try :
            fread 
=  open( " VersionFormat.txt " " r " ) ;
            VersionText 
=   ""  ;
            line  
=  fread.readline()
            
while  line:
                VersionText 
+=  line ;
                line 
=  fread.readline()
            fread.close() ;
        
except :
            
pass
    
    
        VersionValue 
=  { " MajorVersion " :MajorVersion,  " MinorVersion " :MinorVersion,  " MicroVersion " :MicroVersion}
        VersionValue.update({
' WCREV ' :ReposRevNumber,  ' WCDATE ' :ReposComitTime,  ' BuildTime ' :BuildTime})
    
        t 
=  Template(VersionText)
    
    
        fwrite 
=  open( " version.h " " w " )
        fwrite.write(t.safe_substitute(VersionValue))
        fwrite.close() ;
        
print   " 成功生成版本号 "
    
except :
        traceback.print_exc(file 
=  sys.stdout)
        
print   " 无法生成版本号 "
        
    os.system(
" pause " )

 

VersionConf.py 是配置文件:

# --*-- coding:cp936 --*--

MajorVersion 
=   " 1 "
MinorVersion 
=   " 2 "
MicroVersion 
=   " 0 "

 

还可以有VersionFormat.txt, 这个用来描述version.h的格式, 如果没有, 就采用默认格式生成version.h

#define FILEVER        ${MajorVersion},${MinorVersion},${MicroVersion},${WCREV}
#define PRODUCTVER     ${MajorVersion},${MinorVersion},${MicroVersion},${WCREV}
#define STRFILEVER     "${MajorVersion}, ${MinorVersion}, ${MicroVersion}, ${WCREV}/0"
#define STRPRODUCTVER  "${MajorVersion}, ${MinorVersion}, ${MicroVersion}, ${WCREV}/0"

#define VERMAJOR             ${MajorVersion}
#define VERMINOR             ${MinorVersion}
#define VERMICRO             ${MicroVersion}
#define VERBUILD      ${WCREV}

#define BUILDNUMBER      "${MajorVersion}.${MinorVersion}.${MicroVersion}, build ${WCREV}"
#define VERDATE       "${WCDATE}"
#define BUILDTIME      ${BuildTime}

用法: 把这几个文件放到svn代码库的一个工作拷贝下, 直接运行;

          或  python MakeVersion.py  Path,  MakeVersion.py 后可以加一个路径

代码可在这里下载:http://download.csdn.net/source/186366

你可能感兴趣的:(python,SVN,Build,subversion,import,tortoiseSVN)