2015-01-15 18 views
2

我正在使用perl Subversion綁定(SVN :: Client等)。如果我有一個目錄路徑,如何確定該路徑是否是工作副本的一部分 - 它必須很快。在Perl subversion綁定中,我如何確定目錄是否在工作副本中

在svn 1.7之前,可以檢查path/.svn目錄,但很明顯在svn 1.7中無法使用更高級別的.svn目錄。我不能爲.svn向上遞歸目錄,因爲在工作副本中,遠遠沒有被跟蹤的目錄會失敗。

$SVN::Error::handler = undef; 
$client->status2($path, undef, sub { 
    my ($path,$wc_status2) = @_; 
    if ($wc_status2->entry()) { it exists } 

似乎接近,但如果路徑是一個工作拷貝外,和基準比較慢這將返回一個錯誤(我壓抑)。我懷疑我的閱讀中缺少一些基本功能。非常感謝。

+1

無論如何,簡單地檢查'.svn'目錄並不是一個很好的測試,因爲除SVN之外的其他東西可以輕鬆地執行'mkdir .svn'。我會使用'status'而不是'status2',因爲在檢查外部數據時沒有意義。確保在檢查第一個路徑後,立即將'$ recursive','$ get_all'和'$ update'設置爲'0',並且'status_func'子例程立即返回''。你也可以試試'url_from_path'方法,但我不知道它是否會更快。 – ThisSuitIsBlackNot 2015-01-15 19:07:28

回答

0

我不熟悉SVN :: Client,但svn info給出Working Copy Root Path。也許可以通過SVN :: Client :: info訪問它。事實上,如果你只關心一個目錄是否在Subversion控制下,svn info輸出可能就足夠了。

相關問題