我正在使用SVNKit中提供的API將文件提交到SVN。SVN API來查找dir是否版本化
ourClientManager.getCommitClient().doCommit(mypaths, kpLocks, "", force-yes, recursive-true);
在檢入文件之前,我想知道文件的目錄是否是工作拷貝的一部分。 你可以請建議我可以使用哪些API來獲取此信息。
我正在使用SVNKit中提供的API將文件提交到SVN。SVN API來查找dir是否版本化
ourClientManager.getCommitClient().doCommit(mypaths, kpLocks, "", force-yes, recursive-true);
在檢入文件之前,我想知道文件的目錄是否是工作拷貝的一部分。 你可以請建議我可以使用哪些API來獲取此信息。
您想使用的狀態摸不着頭腦:
ourClientManager.getStatusClient().doStatus(path, false).isVersioned()
如果你想弄清楚如果超過一個文件版本,你可能會想要寫一個ISVNStatusHandler
。
鏈接到SVNKit文檔: http://svnkit.com/javadoc/org/tmatesoft/svn/core/wc/SVNStatusClient.html
由於SVNKit開發商,我會建議你使用SVNWCUtil#isVersionedDirectory或SvnOperationFactory#isVersionedDirectory。
SvnOperationFactory#isVersionedDirectory可以接受用於區分非常特殊情況的「isAdditionMode」參數:在工作副本中,您有一個指向嵌套工作副本的未版本化符號鏈接。對於除了「svn add」之外的所有操作,這個符號鏈接應該被認爲是版本化的,因爲它指向一個工作副本(特別是「svn info this_symlink」顯示了嵌套工作副本的信息),但是應該考慮「svn add」作爲unversioned讓用戶將它作爲svn:special屬性的文件添加到存儲庫(而不是顯示工作副本已經版本化的錯誤)。
嗨,你可以用下面的方法來獲得修改和未受控文件清單
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;
}
我試圖用這個信息= ourClientManager.getStatusClient()doStatus(文件,假的)。 - 但這一行給SVN異常 - 文件不工作副本 - 文件這裏是新的包.. – Krishnaveni 2013-03-23 10:05:34
這意味着該文件不在工作副本。如果你想檢查任意文件是否有版本,並且在一個工作副本中,你可能只是注意捕捉這個異常。另一種可能性是工作副本與您使用的庫不兼容,但我相信SVNKit將處理1.6和1.7工作副本格式,所以這可能不是問題。 – 2013-03-23 19:30:21
我能夠通過捕捉異常來做到這一點......謝謝 – Krishnaveni 2013-03-25 06:29:24