svnのリビジョンを埋め込む

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 = 1
 
とだけ書いたファイル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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。