2013-04-30 23 views
0

我們一直在使用Hgban來防止不必要的推送到我們的中央存儲庫。它雖然停止了x數量的Mercurial版本的工作,在這裏報告了HgBan bugMercurial - Hgban的替代品

看來這個項目是「死」,因此我不知道是否有人知道任何其他擴展做相同/類似的事情(=定義某些變更集被阻止到存儲庫)?

+1

你在HgBan中使用哪種過濾器?阻止作者?在提交消息?這可能有助於提出解決方案。 – icabod 2013-04-30 16:19:03

+0

我們使用hgban來阻止某些變更集。 如果推送的內容完全錯誤,我們會從中央倉庫中刪除這些變更集,並通知所有開發人員本地清除變更集,並在服務器上使用hgban阻止變更集的ID(如果某位開發人員錯過了此信息)。 – Roger 2013-04-30 18:01:30

+1

這是一個奇怪的工作流程。通常情況下,您只需修復錯誤或退出變更集,而不是編輯所有這些存儲庫中的歷史記錄。 – 2013-04-30 19:57:15

回答

1

我寫了一個powershell鉤腳本來做你想做的事情。要使用它,你把下面幾行中您的中央回購的.hg\hgrc文件:

[hooks] 
pretxnchangegroup = powershell .hg\hgban.ps1 

PowerShell腳本如下所示,應放在.hg文件夾:

# Default to success 
$returnCode = 0 

# Get the list of nodes being updated 
$output = hg log -r "$Env:HG_NODE`:tip" --template "{node}`n" 

# Get the list of nodes that are banned 
$bannedList = Get-Content ".\.hg\hgbanlist.txt" 

# Loop through the nodes 
$output | Where-Object { $bannedList -contains $_ } | ForEach-Object { 
    Write-Host "Changeset $_ has been banned!" 
    $returnCode = 1 
} 

exit $returnCode 

你應該把一個名爲的文本文件hgbanlist.txt在您的.hg文件夾中包含每個禁用修訂的完整散列,每行一個。例如,這裏是我的測試文件:

2baae3f879579979faa7aec2e32635b97e9eaff9 
922ae67c4229788d21cb9c9ace1abeba38541ff9 

此作品純水銀系統上 - 我不知道Rhodecode將如何影響它,如果在所有。

+0

它工作得很好。謝謝!很多appricated! 你能解釋一下「$ Env:HG_NODE':tip」部分嗎?我明白它的作用,但不理解語法...爲什麼不「$ HG_NODE:tip」工作? – Roger 2013-05-02 08:57:44

+0

...順便說一句 - 感謝您展示如何在PowerShell中編寫鉤子。以爲我們被迫使用python腳本。讓生活更容易;)。 – Roger 2013-05-02 09:04:58

+0

這就是您在PowerShell ** $ Env:VARIABLE_NAME **中引用環境變量的方式。 '字符是powershell中的轉義字符,我正在使用它來將環境變量與:分開。沒問題,樂意幫忙。 – 2013-05-02 09:24:43