2012-06-07 70 views
4

我試圖禁止推送到Mercurial存儲庫,如果某些條件成立。但是,如果用戶使用push --force,則不論是否推送都是必需的從Mercurial prechangegroup鉤讀取命令行參數

我知道很容易,在使用pre-push掛鉤進行推送的機器上執行此操作,該掛鉤將命令行參數傳遞給掛鉤。但是,由於鉤子沒有傳播,我不得不以某種方式將鉤子分發給存儲庫中的每個用戶,並依賴它們而不是搞亂它。

因此,我認爲要走的方法是在存儲庫服務器上有一個prechangegroup鉤子,它檢查條件並在必要時終止推送,但我無法弄清楚獲取命令行參數的方法用戶在從此鉤子推入時使用。有沒有一種方法可以通過在存儲庫服務器上使用鉤子來實現這一點?

我知道可能的解決方法是使用pretxnchangegroup鉤子,如果最新變更集的提交消息遵循特定模式,則允許推送。然而,從版本庫用戶的角度來看,--force選項似乎更容易,因爲它不會強制他們執行虛擬提交來獲取正確的消息。

回答

3

對不起,--force命令行選項永遠不會在線路上發送,所以根本不會在服務器端可用。你需要找出某種方式來表示「我真的是這個意思!」帶外,無論是特殊的用戶名,特殊的提交消息或類似的東西。

考慮只是有第二個服務器端回購,dosn't沒有禁止掛鉤和推動者只有當他們真正的意思時使用它。喜歡的東西:

hg push http://your-server/repo 
.. rejected due to hook failure 
hg push http://your-server/repo-and-I-really-mean-it 

,其中服務器端的回購和I-真正均值,它回購不具有鉤,並自動推送到平原回購。

+0

我很擔心,但你的選擇很有趣。謝謝! – Shoaib

+0

你會如何設置回購和我真的意思 - 它繞過平原回購鉤? – halvorlu