python 自動生成版本號

2021-04-13 01:33:02 字數 3689 閱讀 5117

本文適用於使用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

自動生成版本號

@attention: 需要安裝pysvn模組

"""import

pysvn

import

sysimport

osimport

time

from

string 

import

template

import

traceback

import

versionconf

versiontext 

="""

#define filever        $,$,$,$

#define productver     $,$,$,$

#define strfilever     "$, $, $, $/0"

#define strproductver  "$, $, $, $/0"

#define vermajor             $

#define verminor             $

#define vermicro             $

#define verbuild              $

#define buildnumber         "$.$.$, build $"

#define verdate              "$"

#define buildtime              $

"""if

__name__=="

__main__":

iflen(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 

=versionvalue.update()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        $,$,$,$

#define productver     $,$,$,$

#define strfilever     "$, $, $, $/0"

#define strproductver  "$, $, $, $/0"

#define vermajor             $

#define verminor             $

#define vermicro             $

#define verbuild      $

#define buildnumber      "$.$.$, build $"

#define verdate       "$"

#define buildtime      $

用法: 把這幾個檔案放到svn**庫的乙個工作拷貝下, 直接執行;

或  python makeversion.py  path,  makeversion.py 後可以加乙個路徑

MDK自動生成版本號

mdk編譯工程時自動生成乙個檔案版本號,格式為 v x.x.x build 2021 01 13 11 08 41 by 計算機名 我的操作希望對讀到的小夥伴有幫助!檔案結構是這樣的 test svn mdk proj test.uvprojx getversionnumber svnreion.b...

Vsiual Studio自動生成版本號的一種方法

1 安裝nuget包msbuildtasks 2 編輯專案的csproj檔案,找到被注釋掉的target的beforebuild,去掉注釋,新增如下 如下。3 編譯專案一次就會在專案資料夾下生成 propertiesversion.txt 4 在assemblyinfo.cs檔案中包含了assemb...

android打包自動生成版本號

版本控制比較普遍的 3 種命名格式 1 gnu 風格版本號 主版本號 子版本號 修正版本號 build 編譯版本號 示例 1.0.0 build 1234 2 windows 風格版本號 主版本號 子版本號 修正版本號 編譯版本號 示例 1.0.0.1234 3 net framework 風格版本...