2

假设你有一个指定的 SVN 路径,如下所示,我怎么知道这个项目是 svn 目录还是 svn 文件。谢谢。

http://cvs-server.test.com:8001/svn/test

更新

            SVNURL svnUrl = SVNURL.parseURIEncoded(url);
            SVNRepository repos = SVNRepositoryFactory.create(svnUrl);
            ISVNAuthenticationManager authManager = 
            SVNWCUtil.createDefaultAuthenticationManager("user1","123");

            repos.setAuthenticationManager(authManager);

            SVNNodeKind nodeKind = repos.checkPath(url, repos.getLatestRevision());

为什么我none什至得到 url 是一个文件?我确信这个 url 存在于 SVN 中。ORZ... SVNkit 有很多错误。

4

3 回答 3

3

如果您遇到错误,请向 http://issues.tmatesoft.com/issues/SVNKIT报告。

checkPath不适用于 URL,它适用于绝对路径(即相对于存储库根目录)或相对路径(相对于为其SVNRepository构造实例的 URL)——有关更多详细信息,请参阅其 javadoc

所以你可以使用这个代码

SVNNodeKind nodeKind = repos.checkPath("", repos.getLatestRevision());

甚至

SVNNodeKind nodeKind = repos.checkPath("", -1);

第二种变体会更快,因为它不执行getLatestRevision请求,并且它是一种相当流行的检查 URL 存在的方法,它经常在 SVNKit 本身中使用。

或者,您可以使用绝对路径(应以“/”开头),但要指定的路径取决于您的存储库根目录。您可以通过运行获取存储库根目录

$ svn info "http://cvs-server.test.com:8001/svn/test"

或通过运行

repos.getRepositoryRoot(true);

来自 SVNKit 代码。绝对路径应以“/”开头,并且相对于获得的存储库根目录。

于 2012-11-16T17:43:03.200 回答
2

尝试这样的事情:

String url = "http://cvs-server.test.com:8001/svn/test";
SVNURL svnUrl = SVNURL.parseURIEncoded(url);
SVNRepository repos = SVNRepositoryFactory.create(svnUrl);
ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(DEFAULT_USER, DEFAULT_PASS);
repos.setAuthenticationManager(authManager); 
SVNNodeKind nodeKind = repos.checkPath("", repos.getLatestRevision());

nodeKindFILEDIRNONE之一

于 2012-11-16T13:19:02.017 回答
0

这是正确的方法:

public static boolean isFolder(String url) throws SVNException {
    SVNURL svnURL = SVNURL.parseURIEncoded(url);
    SVNRepository repos = SVNRepositoryFactory.create(svnURL);
    ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(DEFAULT_USER, DEFAULT_PASS);
    repos.setAuthenticationManager(authManager);
    SVNNodeKind nodeKind = repos.checkPath("", repos.getLatestRevision());
    System.out.println(nodeKind);
    return nodeKind != null && nodeKind == SVNNodeKind.DIR;
}
于 2017-03-26T10:08:28.107 回答