我正在用Java编写预提交钩子。预提交钩子(批处理文件)使用参数repositoryLocation
,transactionId
调用我的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将完成提交或回滚。
有人可以帮我解决这个问题吗?
答案 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;做其余的技巧; - )