svnkit:在预提交挂钩期间获取上传的文件内容

时间:2013-08-08 13:35:15

标签: svn transactions svnkit pre-commit working-copy

我正在用Java编写预提交钩子。预提交钩子(批处理文件)使用参数repositoryLocationtransactionId调用我的Java程序。我需要在提交期间验证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将完成提交或回滚。

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

2 个答案:

答案 0 :(得分:1)

在钩子的bat文件中,您可以使用svnlook changed ...来获取事务中的文件列表以及来自changed命令的文件名 - svnlook cat ... FILENAME以获取文件的内容标准输出

答案 1 :(得分: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

功能,我可以得到必要的输出流&amp;做其余的技巧; - )