0

我正在使用 SVNKit 中提供的 API 将文件提交到 SVN。

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

在签入文件之前,我想知道文件的目录是否是工作副本的一部分。您能否建议我可以使用哪些 API 来获取此信息。

4

3 回答 3

2

作为 SVNKit 开发人员,我建议您使用 SVNWCUtil#isV​​ersionedDirectory 或 SvnOperationFactory#isVersionedDirectory。

SvnOperationFactory#isVersionedDirectory 可以接受“isAdditionMode”参数,用于区分非常特殊的情况:在您的工作副本中,您有一个指向嵌套工作副本的未版本化符号链接。对于除“svn add”之外的所有操作,此符号链接应被视为版本,因为它指向工作副本(特别是“svn info this_symlink”显示该嵌套工作副本的信息),但应考虑“svn add”作为未版本化的,让用户将其作为具有 svn:special 属性的文件添加到存储库(而不是显示工作副本已经版本化的错误)。

于 2013-03-27T23:54:34.503 回答
2

您想使用 status 来解决这个问题:

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

如果您想确定是否有多个文件被版本控制,您可能需要编写一个ISVNStatusHandler.

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

于 2013-03-22T23:31:03.590 回答
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;
}
于 2013-04-03T07:28:09.707 回答