HG 我就不做說明了。用過的人就知道了。他是一個分布式版本管理工具,具體使用方法網上有很多。我這里介紹的是,如果在提交版本的時候動態(tài)修改我程序的版本號。
這里我以VS2008 中的C#項目為列介紹一下如果在程序提交的時候,讓HG來動態(tài)修改程序的版本號。
C#中版本號主要是由項目中AssemblyInfo.cs 文件中的
[assembly: AssemblyVersion("3.0.0.107)]
[assembly: AssemblyFileVersion("3.0.0.107")]
這兩據話來控制的。我們只需要在在HG提交版本的時候動態(tài)修改這兩句話就可以了。更準確的說是將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")]
現(xiàn)在模板文件建立好了
現(xiàn)在我們修改.hg 目錄下的hgrc文件,
在文件末尾添加一下兩句換
[hooks]
commit = python:.hg/commit_version.py:commit_version
在文件提交的時候就會執(zhí)行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中的版本號相同了