2010-11-18 22 views
5

我有一個腳本位於我的工作副本的頂層,並且想將它用作Mercurial鉤子。如果我使用鉤子的絕對路徑名,那麼一切都很好,但我需要一個相對路徑名,這樣整個事情可以輕鬆移動,在其他工作副本中使用,其他開發人員可以按原樣複製hgrc。如何使用Mercurial鉤子的相對路徑名

/space/project/.hg/hgrc包含

[hooks] 
update = genid 

的genid,配置腳本在/空間/項目/ genid,配置

如果我在/空間鉤子被調用就好/項目但是如果我的當前目錄是/ space/project/src/tools,那麼'hg update'會顯示錯誤,因爲找不到鉤子。

+0

當某人執行「hg update null」時會發生什麼情況,從而清除工作目錄?當你嘗試運行任何'hg'命令時,它會嘗試加載現在不存在的擴展名。當然,這仍然可能是絕對路徑的問題,但如果擴展腳本位於正在積極開展工作的回購庫中,則更有可能。 – 2010-11-18 22:07:59

+1

那麼不要那樣做!掛鉤默認爲空,必須主動添加,所以如果沒有工作副本,則不要添加掛鉤。這對其他開發該項目的開發人員來說不成問題。 – 2010-11-18 22:38:04

+1

@TimDelaney不會有任何災難性的影響 - 運行掛鉤只會失敗,但仍然發生提交 – 2014-02-10 14:39:50

回答

2

Python的鉤不能使用相對路徑。腳本鉤可以這樣:

[hooks] 
update = ./genid 
+0

這工作得很好! – pyfunc 2010-11-19 00:40:51

+1

你能澄清 - 我無法得到這個工作。我想要.hg目錄上的目錄。 wouldnt ./something只是指當前目錄? – 2014-02-10 14:35:46

+0

* Python鉤子不能使用相對路徑* - 請提供參考嗎? – 2014-03-04 14:26:13

2

在某些情況下,環境變量在mercurial配置中展開。所以你可以看看你是否可以使用環境變量。

[hooks] 
update = $MercurialHooks/genid 

參見FAQ(12)https://www.mercurial-scm.org/wiki/TipsAndTricks

+0

沒有環境變量指向當前正在操作的存儲庫。 – 2010-11-18 22:46:58

+0

@Roger Binns:我的意思是你可以設置它並使用它。 – pyfunc 2010-11-19 00:40:12

+0

是的,我明白你的意思。但是它不適用於我的場景,例如在多個不同位置中籤出或者將存儲庫移至其他目錄。如果你不得不維護一個環境變量,那麼它可能是$ PATH。如果Mercurial設置了一個如$ HG_REPO_DIR,那麼它會很好。 – 2010-11-19 04:18:39

0

我有同樣的問題,無法解決它。解決方法很簡單!我在回購中對文件進行了版本化,並將其複製到我的.hg文件夾中!不理想,但它不可能改變,其他回購用戶仍然可以獲得該文件的副本