2012-06-08 45 views
0

在我的工作環境中,每當有人試圖將文件簽入到SVN回購任何10-20個項目時,都會在Unix計算機上運行一個Perl腳本。SVN預提交符號鏈接路徑在Perl中

它的工作方式是每個項目都有自己的「Hooks」文件夾,其中包含一個名爲「pre-commit」的文件,SVN在某人簽入某些內容時自動執行。除了「pre-commit」文件實際上是所有項目通用的一箇中心Perl腳本的符號鏈接,所以如果需要對Perl腳本進行更改,則不需要爲每個項目完成。

所以我的問題是這樣的:我需要在這些項目的每個「鉤子」目錄中放置一個文本文件,每個目錄都包含一些特定於該項目的設置。所以每個「鉤子」目錄下都會有10-20個設置文件(每個項目一個)。

問題是我需要在Perl腳本中打開這些文本文件並從它們讀取,但我遇到的問題讓Perl知道在哪裏可以找到它。我嘗試使用$ 0參數,它應該告訴我腳本在哪裏執行,但是因爲它是一個符號鏈接,它只是表示「不是目錄」,並且腳本終止。我需要獲取「鉤子」目錄的路徑,以便我可以找到文本文件。

回答

0

SVN預先提交腳本應該以存儲庫的路徑作爲其第一個參數進行調用。在Perl腳本中,該參數應該可以作爲$ARGV[0]。你應該能夠目錄或建立路徑相應鉤到該目錄中的文件通過簡單地附加到庫的路徑,像這樣:

$repopath = $ARGV[0]; 
$hookspath = $repopath . "/hooks"; 
$myfilepath = $hookspath . "/myfile"; 

雖然最大的可移植性這將是清潔劑使用File :: Spec模塊中的路徑名操作函數來執行此操作。

如果此方法無效,那麼您將不得不更多地解釋如何調用Perl腳本。例如,如果您的預提交腳本實際上是一個最終調用perl的shell腳本包裝器,那麼也許它不會正確地傳遞預提交參數。

向我們展示您當前的失敗代碼也是一件好事。

+0

工作完美。謝謝! – carlmango11