1

我正在用 Java 编写一个预提交钩子。预提交挂钩(批处理文件)使用参数调用我的 Java 程序:repositoryLocation, transactionId. 我需要在提交期间验证 XML 文件,如果其中任何一个似乎无效,我会将非零退出代码返回到我的预提交挂钩,然后回滚整个提交事务。

我可以通过以下方式访问文件的任何修订版的内容代码:

SVNRepository repository = ...;
SVNProperties fileProperties = new SVNProperties();
ByteArrayOutputStream baos = new ByteArrayOutputStream( );

repository.getFile( changeEntry.getCopyFromPath() , revisionNum , fileProperties , baos );
log.debug("<![CDATA["+baos.toString()+"]]>");

但是我无法访问正在上传的文件的内容(工作副本的内容,由用户提交)。我不想向 SVN 写任何东西,我需要读取上传文件的内容,然后进行一些验证。在我的 Java 程序完成后,SVN 将完成提交或回滚。

有人可以帮我解决这个问题吗?

4

2 回答 2

1

在钩子的 bat-file 中,您可以使用svnlook changed ...on 命令获取事务中的文件列表和changed命令中的文件名 -svnlook cat ... FILENAME以便在 stdout 中获取文件内容

于 2013-08-08T14:09:08.967 回答
0

感谢 Lazy Badger 和我的一位同事的建议,我才发现

SVNLOOK CAT repoPath -t txn

是我需要重新发明的命令,所以通过查看

org.tmatesoft.svn.core.wc.admin.SVNLookClient.doCat(File repositoryRoot, String path, String transactionName, OutputStream out) throws SVNException

函数,我可以获得必要的输出流并完成其余的技巧;-)

于 2013-08-09T10:12:00.163 回答