我使用SVNKit中提供的API将文件提交给SVN。
ourClientManager.getCommitClient().doCommit(mypaths, kpLocks, "", force-yes, recursive-true);
我想在检入文件之前找出文件的目录是否是工作副本的一部分。 您能否建议我可以使用哪些API来获取此信息。
答案 0 :(得分:2)
您想使用状态来解决这个问题:
ourClientManager.getStatusClient().doStatus(path, false).isVersioned()
如果你想弄清楚是否有多个文件是版本化的,你可能想写一个ISVNStatusHandler
。
链接到SVNKit文档: http://svnkit.com/javadoc/org/tmatesoft/svn/core/wc/SVNStatusClient.html
答案 1 :(得分:2)
作为SVNKit开发人员,我建议您使用SVNWCUtil#isVersionedDirectory或SvnOperationFactory#isVersionedDirectory。
SvnOperationFactory#isVersionedDirectory可以接受用于区分特殊情况的“isAdditionMode”参数:在工作副本中,您有一个指向嵌套工作副本的无版本符号链接。对于除“svn add”之外的所有操作,此符号链接应被视为版本化,因为它指向工作副本(特别是“svn info this_symlink”显示该嵌套工作副本的信息),但是应该考虑“svn add” as unversioned让用户将其作为带有svn:special属性的文件添加到存储库中(而不是显示工作副本已经版本化的错误)。
答案 2 :(得分: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;
}