2013-03-22 22 views
0

我正在使用SVNKit中提供的API將文件提交到SVN。SVN API來查找dir是否版本化

ourClientManager.getCommitClient().doCommit(mypaths, kpLocks, "", force-yes, recursive-true); 

在檢入文件之前,我想知道文件的目錄是否是工作拷貝的一部分。 你可以請建議我可以使用哪些API來獲取此信息。

回答

2

您想使用的狀態摸不着頭腦:

ourClientManager.getStatusClient().doStatus(path, false).isVersioned()

如果你想弄清楚如果超過一個文件版本,你可能會想要寫一個ISVNStatusHandler

鏈接到SVNKit文檔: http://svnkit.com/javadoc/org/tmatesoft/svn/core/wc/SVNStatusClient.html

+0

我試圖用這個信息= ourClientManager.getStatusClient()doStatus(文件,假的)。 - 但這一行給SVN異常 - 文件不工作副本 - 文件這裏是新的包.. – Krishnaveni 2013-03-23 10:05:34

+0

這意味着該文件不在工作副本。如果你想檢查任意文件是否有版本,並且在一個工作副本中,你可能只是注意捕捉這個異常。另一種可能性是工作副本與您使用的庫不兼容,但我相信SVNKit將處理1.6和1.7工作副本格式,所以這可能不是問題。 – 2013-03-23 19:30:21

+0

我能夠通過捕捉異常來做到這一點......謝謝 – Krishnaveni 2013-03-25 06:29:24

2

由於SVNKit開發商,我會建議你使用SVNWCUtil#isVersionedDirectory或SvnOperationFactory#isVersionedDirectory。

SvnOperationFactory#isVersionedDirectory可以接受用於區分非常特殊情況的「isAdditionMode」參數:在工作副本中,您有一個指向嵌套工作副本的未版本化符號鏈接。對於除了「svn add」之外的所有操作,這個符號鏈接應該被認爲是版本化的,因爲它指向一個工作副本(特別是「svn info this_symlink」顯示了嵌套工作副本的信息),但是應該考慮「svn add」作爲unversioned讓用戶將它作爲svn:special屬性的文件添加到存儲庫(而不是顯示工作副本已經版本化的錯誤)。

1

嗨,你可以用下面的方法來獲得修改和未受控文件清單

public List<SVNStatus> getCommitableFiles(File path, String revision) throws SVNException { 
    SVNClientManager svnClientManager = SVNClientManager.newInstance(); 
    final List<SVNStatus> allSVNStatus = new ArrayList<SVNStatus>(); 
    svnClientManager.getStatusClient().doStatus(path, SVNRevision.parse(revision), SVNDepth.INFINITY, false, false, false, false, new ISVNStatusHandler() { 
     public void handleStatus(SVNStatus status) throws SVNException { 
      SVNStatusType statusType = status.getContentsStatus(); 
      if (statusType != SVNStatusType.STATUS_NONE && statusType != SVNStatusType.STATUS_NORMAL 
        && statusType != SVNStatusType.STATUS_IGNORED) { 
       allSVNStatus.add(status); 
      } 
     } 
    }, null); 

    return allSVNStatus; 
}