SVNのリビジョンを返す関数の作成
手荒ですが、他に思いつかなかったので。
SubWCRev.exeをサブプロセスで開き、revisionナンバーをgetします。
windows,TortoiseSVNの場合を公開しますが、
svnコマンドが普通に使えるlinuxなら同じようにできるでしょう。
import subprocess
def getSvnRevision():
path = 'C:/home/pathToTheDir'
#get revision
cmd = ['C:/Program Files/TortoiseSVN/bin/SubWCRev.exe', path]
p = subprocess.Popen(cmd,
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
(stdouterr, stdin) = (p.stdout, p.stdin)
#print res
revision = 0
while True:
line = stdouterr.readline()
if not line:
break
lineSplitted=line.rstrip().split()
if lineSplitted[0]=='Last':
revision = int(lineSplitted[-1])
break
ret = p.wait()
return revision
埋め込む
とだけ書いたファイルrevision.pyを用意します。
これをコードから呼び出す。
from revision import *
#これで変数revisionが普通に使えます。
print '(rev: '+ str(revision)+')'
更新する
自分の場合は最終配布はpy2exeで考えてるので、以下のコードをsetup.pyの頭に入れておけば、ビルド時に最新のリビジョンナンバーがコードに埋め込まれるわけです。
先ほどの関数を呼び出し、最新のリビジョンをintでget,revision.pyに上書きします。
import getSvnRevision
rev = getSvnRevision.getSvnRevision()
o = open('src/revision.py','w')
o.write('revision = ' + str(rev))
o.close()
すごい馬鹿なことをしてるかもですが、このコードは、配布exeには残らないので
まぁ動けばいいです。
最終更新:2009年07月08日 13:55