6

私は試してきました

def debug_hook(ui, repo, **kwargs):
    changectx = repo[None]
    ui.status('change.desc: %s\n' % changectx.description())
    return True

ただし、常に空の文字列が出力されます。これは precommit フックであり、メッセージがまだ利用できないためですか? それとも、明らかな何かが欠けているだけですか?

4

2 に答える 2

8

私の最初のアプローチには 2 つの問題があることがわかりました。

  1. jkが指摘したように、イベントprecommitはコミットの前に発生するため、処理中のコミットのメタデータはまだ存在しません。代わりに使用pretxncommitすると、メタデータは存在しますが、トランザクションはまだデータベースにコミットされていません。
  2. を使用changectx = repo[None]すると、作業ディレクトリの変更コンテキストが得られます。ただし、現在のコミットの情報が必要なので、changectx = repo['tip']代わりに使用すると最新のメタデータが得られます。

changectx = repo['tip']イベントで使用するとprecommit、現在作業中のコミットではなく、実際に処理された最後のコミットが取得されることに注意してください。

于 2010-03-17T11:56:23.107 に答える
2

プリコミットではメッセージがまだ存在しないというのは正しいと思います。pretxncommit を使用すれば可能ですが、トランザクションがほぼ完了しているため、その時点で何ができるかは 100% わかりません。

于 2010-03-17T09:36:47.153 に答える