私は試してきました
def debug_hook(ui, repo, **kwargs):
changectx = repo[None]
ui.status('change.desc: %s\n' % changectx.description())
return True
ただし、常に空の文字列が出力されます。これは precommit フックであり、メッセージがまだ利用できないためですか? それとも、明らかな何かが欠けているだけですか?
私は試してきました
def debug_hook(ui, repo, **kwargs):
changectx = repo[None]
ui.status('change.desc: %s\n' % changectx.description())
return True
ただし、常に空の文字列が出力されます。これは precommit フックであり、メッセージがまだ利用できないためですか? それとも、明らかな何かが欠けているだけですか?
私の最初のアプローチには 2 つの問題があることがわかりました。
precommit
はコミットの前に発生するため、処理中のコミットのメタデータはまだ存在しません。代わりに使用pretxncommit
すると、メタデータは存在しますが、トランザクションはまだデータベースにコミットされていません。changectx = repo[None]
すると、作業ディレクトリの変更コンテキストが得られます。ただし、現在のコミットの情報が必要なので、changectx = repo['tip']
代わりに使用すると最新のメタデータが得られます。changectx = repo['tip']
イベントで使用するとprecommit
、現在作業中のコミットではなく、実際に処理された最後のコミットが取得されることに注意してください。
プリコミットではメッセージがまだ存在しないというのは正しいと思います。pretxncommit を使用すれば可能ですが、トランザクションがほぼ完了しているため、その時点で何ができるかは 100% わかりません。