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());

noneURLがファイルであるのになぜ取得したのですか?このURLはSVNに存在すると確信しています。ORZ...SVNkitには多くのバグがあります。

4

3 に答える 3

3

バグに遭遇した場合は、 http://issues.tmatesoft.com/issues/SVNKITに報告してください。

checkPathURL では機能しません。絶対パス (つまり、リポジトリ ルートからの相対パス) または相対パス (SVNRepositoryインスタンスが構築された URL からの相対パス) で機能します --- 詳細については、その javadoc を参照してください

したがって、このコードを使用できます

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

あるいは

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

2 番目のバリアントは、リクエストを実行しないため高速になります。これgetLatestRevisionは、SVNKit 自体でよく使用される URL の存在を確認するためのかなり一般的な方法です。

または、絶対パス (「/」で始まる必要があります) を使用することもできますが、指定するパスはリポジトリのルートによって異なります。次のコマンドを実行すると、リポジトリ ルートを取得できます。

$ 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());

nodeKindFILEDIRまたはのいずれかになりNONEます。

于 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 に答える