2009-12-03 154 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> 

这样你就不会通过网络层 - 这可能会节省一些时间。

相关问题