2012-02-15 28 views
3

これは奇妙なものです。私はあなたが助けることを願っていますJavaでSVNKitを使用してdoLog()を呼び出すと、不思議なURL

私はセットアップし、SVNKitでdoLog()を呼び出そうとしています。セットアップは少し複雑で、私はいくつかのパラメータについてはわかりません。エラーは(私が思う)いくつかの "未知の"文字がSVN URLに挿入されている可能性があります。ここで少し消毒コードは次のとおりです。ここで

// Auth manager 
    String userName = "ksnortum"; 
    String password = "[email protected]"; 
    ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(userName, password); 

    // Options 
    boolean readonly = true; 
    ISVNOptions options = SVNWCUtil.createDefaultOptions(readonly); 

    // Get log client 
    SVNLogClient logClient = new SVNLogClient(authManager, options); 

    // SVN URL parameters 
    String protocol = "https"; 
    String userInfo = userName; 
    String host = "svn.hostname.com"; 
    int port = 8443; 
    String path = ""; 
    boolean uriEncoded = true; 
    SVNURL url = null; 

    // Create URL 
    try { 
     url = SVNURL.create(protocol, userInfo, host, port, path, uriEncoded); 
    } 
    catch (SVNException e) { 
     System.out.println("Can't create URL: " + e.toString()); 
    } 

    System.out.println("URL: " + url.toString()); // debug 

    // Parameters for doLog() 
    String[] paths = { "svn/Training/PDX_Cycle_2_2011" }; 
    SVNRevision pegRevision = SVNRevision.create(0l); 
    SVNRevision startRevision = SVNRevision.create(0l); 
    SVNRevision endRevision = SVNRevision.create(-1l); 
    boolean stopOnCopy = false; 
    boolean discoverChangedPaths = true; 
    long limit = 9999l; 

    // Log event handler 
    ISVNLogEntryHandler handler = new ISVNLogEntryHandler() { 

     /** 
     * This method will process when doLog() is done 
     */ 
     @Override 
     public void handleLogEntry(SVNLogEntry logEntry) throws SVNException { 
      System.out.println("Author: " + logEntry.getAuthor()); 
      System.out.println("Date: " + logEntry.getDate()); 
      System.out.println("Message: " + logEntry.getMessage()); 
      System.out.println("Revision: " + logEntry.getRevision()); 
     } 
    }; 

    // Do log 
    try { 
     logClient.doLog(url, paths, pegRevision, startRevision, endRevision, stopOnCopy, discoverChangedPaths, limit, handler); 
    } 
    catch (SVNException e) { 
     System.out.println("Error in doLog() "); 
     e.printStackTrace(); 
    } 

は、デバッグおよびスタックトレース情報です:

URL: https://[email protected]:8443 
org.tmatesoft.svn.core.SVNException: svn: '/svn/Training/!svn/bc/0/PDX_Cycle_2_2011' path not found: 404 Not Found (https://[email protected]:8443) 
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64) 
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51) 
at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.logImpl(DAVRepository.java:986) 
at org.tmatesoft.svn.core.io.SVNRepository.log(SVNRepository.java:1034) 
at org.tmatesoft.svn.core.wc.SVNLogClient.doLog(SVNLogClient.java:1028) 
at org.tmatesoft.svn.core.wc.SVNLogClient.doLog(SVNLogClient.java:895) 
at org.tmatesoft.svn.core.wc.SVNLogClient.doLog(SVNLogClient.java:827) 
at org.tmatesoft.svn.examples.repository.LogEntry.start(LogEntry.java:93) 
at org.tmatesoft.svn.examples.repository.LogEntry.main(LogEntry.java:27) 
Error in doLog() 

問題がsvn: '/svn/Training/!svn/bc/0/PDX_Cycle_2_2011' path not foundです。私はなぜ!svn/bc/0がパス名にあるのかわかりません。


編集:

私はリビジョンで良く行うために必要なように見えます。私はこの行を変更しました:

SVNRevision endRevision = SVNRevision.HEAD; 

これは多くの助けになりました。

String[] paths = { "" }; 

を...とURLにそれらを置く:また、私はdoLog()のparamsの外にパスを取っ

String path = "svn/Training/PDX_Cycle_2_2011"; 

リビジョンが最大の問題だったようです。コメントしてくれてありがとう。

+0

パスワードの「@」記号がこの原因で問題を引き起こしていると思いますか? URI(http://en.wikipedia.org/wiki/URI_scheme)ではなく、ユーザー名とパスワードが異なる方法でSVNKitのAuthenticationManagerを使用するように変更できますか? – khmarbaise

+0

!svn/bc/OKはDAVリポジトリでOKです。しかし、 "0"はリビジョン0を意味します:問題は、ペグリビジョン0を使用している、つまりリビジョン0の "url"にアクセスしたいということです。 "url"がリポジトリルートでないと失敗します。 – mstrap

答えて

2

!svn/bc/0が正当なURLであり、リビジョンゼロを指していることが分かっています。終了リビジョンを-1ではなくHEADに変更すると、それが機能しました。

関連する問題