我一直在試圖如何訪問Mercurial進程內掛鉤中的提交消息?
def debug_hook(ui, repo, **kwargs):
changectx = repo[None]
ui.status('change.desc: %s\n' % changectx.description())
return True
但它始終打印一個空字符串。這是因爲它是一個precommit鉤子,並且該消息尚未提供?還是我錯過了一些明顯的東西?
我一直在試圖如何訪問Mercurial進程內掛鉤中的提交消息?
def debug_hook(ui, repo, **kwargs):
changectx = repo[None]
ui.status('change.desc: %s\n' % changectx.description())
return True
但它始終打印一個空字符串。這是因爲它是一個precommit鉤子,並且該消息尚未提供?還是我錯過了一些明顯的東西?
我認爲你是對的,在precommit消息還不存在。如果您使用prexxcommit它會,但我不是100%確定它在什麼時候可以做,因爲交易幾乎完成。
原來有兩件事情錯了我最初的方法:
precommit
事件發生前的承諾,以便爲正在處理提交的元數據不存在然而。通過使用pretxncommit
來代替,元數據存在,但事務尚未提交到數據庫。changectx = repo[None]
可爲您提供工作目錄的更改上下文。但是我們想要使用當前提交的信息,所以使用changectx = repo['tip']
來代替最新的元數據。請注意,如果您使用changectx = repo['tip']
與precommit
事件,你就會得到最後一次提交處理,而不是當前您正在使用的一個。
是的,雖然「這個掛鉤可以訪問與幾乎是新的變更集關聯的元數據,但是它不應該對這些數據做任何永久性處理,它也不能修改工作目錄。 –
這就是爲什麼在堆棧溢出時鼓勵詢問和回答自己的問題的原因。一年多後,這個答案對我來說非常有幫助,因爲我正在瀏覽可用於HG API的[非常稀少的文檔](http://mercurial.selenic.com/wiki/MercurialApi)。 –
事實證明,這是答案的一部分(使用prexxcommit)。我會發佈一個答案的細節。 – davidavr