2010-08-20 43 views
4

是否可以通過創建擴展來修改核心Mercurial命令(例如hg commithg status)的行爲?使用擴展修改核心Mercurial命令的行爲?

例如,是否可以修改hg commit以要求用戶輸入問題跟蹤ID?

我知道可以使用掛鉤腳本,但是這些腳本不是通過hg pull發佈的,需要爲每個使用的存儲庫配置。

+0

我敢肯定,你可以在用戶的​​hgrc中放置一個鉤子腳本,使其適用於所有的倉庫。此外,你可以讓鉤子文件在Mercurial repo ... – Borealid 2010-08-20 00:49:12

+1

@Borealid這可能是事實,但我仍然有興趣知道我的問題的答案。如果擴展可以修改核心命令,我還會考慮爲企業環境添加其他功能。不幸的是,Mercurial API沒有太多文檔。 – 2010-08-20 01:09:04

回答

4

回答我的問題

善變的API提供了extensions.wrapcommand(table, command, wrapper)方法,這似乎提供所需的功能。

從源代碼:

裹在 表名爲`命令」命令。

使用包裝器替換命令表 中的命令。將封裝的命令 插入到由表參數指定的命令表 中。該 包裝將被稱爲像 包裝(原稿,* ARGS,** kwargs)其中 原稿是原來的(包裝) 功能,* ARGS,** kwargs是 參數傳遞給它。

幾個例子:

+1

當包裝命令不要改變輸出時要小心。 Eclipse和其他環境使用命令行輸出進行整合,如果它們發生變化,將會窒息。 – 2010-08-20 02:48:06

2

只是要注意:兩個擴展和掛鉤具有完全相同的質量 - 部署限制。在這兩種情況下,您都必須引導內部用戶下載一個軟件,無論是掛鉤還是擴展,然後在homedir或repo中的hgrc中啓用它。

對於這兩個鉤子和擴展,你可以使用任何機制來分發軟件,可以在全球範圍內的/ etc使他們/善變/ hgrc

擴展有一定的優勢超過鉤來有多深,他們可以在多變的內部挖掘,但部署是相同的。