HG 我就不做说明了。用过的人就知道了。他是一个分布式版本管理工具,具体使用方法网上有很多。我这里介绍的是,如果在提交版本的时候动态修改我程序的版本号。
这里我以VS2008 中的C#项目为列介绍一下如果在程序提交的时候,让HG来动态修改程序的版本号。

C#中版本号主要是由项目中AssemblyInfo.cs 文件中的
[assembly: AssemblyVersion("3.0.0.107)]
[assembly: AssemblyFileVersion("3.0.0.107")]
这两据话来控制的。我们只需要在在HG提交版本的时候动态修改这两句话就可以了。更准确的说是将107修改就可以了。
首先我们需要建立一个版本文件的模板,在每回提交的时候通过模板来生产对应的版本控制文件。
我们以新建一个叫TemplateAssemblyInfo的文件,文件内容与VS编译器生成的AssemblyInfo.cs一模一样,不过需要将文件中的
[assembly: AssemblyVersion("3.0.0.107)] 改为 assembly: AssemblyVersion("3.0.0.MyVersion)]
[assembly: AssemblyFileVersion("3.0.0.107")] 改为 [assembly: AssemblyFileVersion("3.0.0.MyVersion")]
现在模板文件建立好了
现在我们修改.hg   目录下的hgrc文件,
在文件末尾添加一下两句换
[hooks]
commit = python:.hg/commit_version.py:commit_version
在文件提交的时候就会执行commit_version.py 中的commit_version函数

然后我们在目录.hg中新建文件commit_version.py ,文件如下所示
#!/usr/bin/env python
#
 coding:utf-8

"""
Created by ben on 2010/11/24 .
Copyright (c) 2010 http://sa3.org All rights reserved. 
"""
import shutil  
import os  
import os.path 
import re
PROJECT_PATH 
= os.path.realpath(os.path.dirname(__file__))
FILELISTSOURCE 
= ['./LiveSwitch3/TemplateAssemblyInfo.cs','./LiveSwitch4/TemplateAssemblyInfo.cs']
VERSION_STR 
= 'MyVersion'
TEMPLATE_STR
='Template'
TARGETDIR_STR
='/Properties'
TARGETFILE_STR
='/AssemblyInfo.cs'

def commit_version(ui,repo,**kwargs):
    
    
for filename in FILELISTSOURCE:
        fOri 
= open(filename, 'r+')
        data 
= fOri.read()
        
        strinfo 
= re.compile(VERSION_STR)
        vesion 
= "%s" %(len(repo) - 1)
        b 
= strinfo.sub(vesion,data)
        fOri.close() 
        
        
        
        nEndIndex 
=  filename.rindex('/')
        
        fileTargetDir 
= filename[0:nEndIndex]+TARGETDIR_STR
        fileTargetFile 
= fileTargetDir+TARGETFILE_STR
        
print fileTargetDir
        
print fileTargetFile
        
        
if os.path.isfile(fileTargetFile):
            os.remove(fileTargetFile)
        
        
if not os.path.isdir(fileTargetDir) :
            os.mkdir(fileTargetDir)
        
        fNew 
= open(fileTargetFile, 'w+')
        
#print b
        fNew.write(b)
        fNew.close()

if __name__=='__main__':
    
pass

然后我们可以提交代码试一下,看看AssemblyInfo.cs中的版本号是否与HG中的版本号相同了


posted on 2012-03-20 12:02 arrow8209 阅读(1429) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


统计