1

Javaでプリコミットフックを書いています。pre-commit フック (バッチ ファイル) は、次のパラメーターを使用して 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

フックのバットファイル内svnlook changed ...で、トランザクション内のファイルのリストを取得するために、およびchangedコマンドからファイル名を取得するために使用できます - svnlook cat ... FILENAMEstdout でファイルのコンテンツを取得するために

于 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 に答える