ビルドの際にgitのリビジョン(sha1ハッシュ)をソースに埋め込んでおけば、デグレードが起きた際などにソースをかんたんに復元できるだろう。gitにはrev-parseというサブコマンドがあり、これでHEADの40桁のsha1を出力できるのでpythonで取得するには以下のように書けばいい。
1 2 3 4 5 6 7 8 |
def getGitHash(dir, git): ''' get hash from dir''' args = [git, '-C', dir, 'rev-parse', 'HEAD'] hash = subprocess.check_output(args).decode('utf-8').strip() if len(hash) != 40: exit('hex digits of hash is not 40') return hash |
check_outputはコマンドの出力を返してくれる(コマンドが0以外を返すと例外)。
あとはC++ヘッダーファイルなどに書き出して、ビルドすればよい。
gitおサブモジュールを使っている場合はこれで問題ないが、他のgitで管理しているソースも取り込んでいる場合には、それらのハッシュも記録しておいたほうがいいだろう。