#!/usr/bin/env python

import string
import sys
from svn import core, fs, delta, repos

class ChangeReceiver(delta.Editor):
  def __init__(self, fs_ptr, txn_ptr, txn_root, pool):
    self.fs_ptr = fs_ptr
    self.txn_ptr = txn_ptr
    self.txn_root = txn_root
    self.pool = pool
    self.failed = 0
    self.do_debug = True
    self.base_rev = fs.txn_base_revision(self.txn_ptr)
    self.base_root = fs.revision_root(self.fs_ptr, self.base_rev, self.pool)

  def open_directory(self, path, parent_baton, base_revision, dir_pool):
    if path == "copied-dir":
      def history_lookup(path, rev, pool):
	  raise core.SubversionException(apr_err=core.SVN_ERR_CEASE_INVOCATION, message="Hi from history_lookup")
      repos.svn_repos_history2(self.fs_ptr, path, history_lookup, None, 0, self.base_rev, True, self.pool)
    return None

def verify(pool, repos_path, txn):
  fs_ptr = repos.fs(repos.open(repos_path, pool))
  txn_ptr = fs.open_txn(fs_ptr, txn, pool)
  txn_root = fs.txn_root(txn_ptr, pool)
  editor = ChangeReceiver(fs_ptr, txn_ptr, txn_root, pool)
  e_ptr, e_baton = delta.make_editor(editor, pool)
  repos.svn_repos_replay2(txn_root, "", -1, True, e_ptr, e_baton, None, pool)

if __name__ == '__main__':
  assert len(sys.argv) == 3
  core.run_app(verify, sys.argv[1], sys.argv[2])

