2009-12-03 156 views
2

這是從SVN文檔(http://svnbook.red-bean.com/en/1.1/re44.html如何使用svnlook檢查路徑是文件夾還是文件?

$ svnlook changed -r 39 /usr/local/svn/repos 
A trunk/vendors/deli/ 
A trunk/vendors/deli/chips.txt 
A trunk/vendors/deli/sandwich.txt 
A trunk/vendors/deli/pickle.txt 

我可以檢查斜線(「/」),並且如果存在,那麼它是一個文件夾。

1)但我怎樣才能確保svn總是顯示文件夾路徑與尾部的斜槓?

2)或者,也許有更可靠的方法來檢查路徑類型(文件夾或文件)?

回答

3

AFAIK在目錄名稱上總會有一個尾部斜線,因爲這表示它是一個目錄。否則,它看起來像一個沒有擴展名的文件。

0

客戶端和假設你有某種unix shell 你可以將'A'部分剪掉,然後簡單地測試路徑是否是使用shell提供的函數的目錄。像

set TEST=`cat test.txt | cut -c5-` 
for p in $TEST;do 
if [[ -d $p ]];then 
    echo "$p is a directory" 
fi 
done 

服務器端,您可以使用:

svnlook dirs-changed REPOS_PATH 

檢測更改的目錄,然後從「svnlook的改變」篩選出來的更改日誌,或者您可以使用:

svn info $PATH 

在每個路徑上,並檢查節點種類,雖然這可能會很慢。

+0

我不認爲這將工作,因爲我在pre-commit鉤子的服務器上使用svnlook。這些路徑實際上並不存在於服務器上 – Chicago 2009-12-03 16:10:06

+0

對不起,我沒有注意到這是服務器端。您可以使用 svn info 並檢查節點類型 – Jean 2009-12-03 16:31:44

1

下面就來解析的svn info(Python的+ pysvn)輸出替代:

from pysvn import Client, node_kind 

client = Client() 

def isDir(url): 

    infoList = client.info2(url, recurse=False) 
    _, info = infoList[0] 

    return info.kind == node_kind.dir 

在您的具體情況,因爲你是在服務器上,你甚至可以用file://網址:

file://<absolute path to repo>/<relative path to file/dir within repo> 

這樣你就不會通過網絡層 - 這可能會節省一些時間。

相關問題