These are scripts that might be useful run from repository hooks.
Your Mileage May Vary.

   1. commit-email.pl
      Uses the `svnlook' program to send commit emails.  Invoke it
      from `repository/hooks/post-commit'.  Run the script with no
      arguments for usage.

   2. mailer.py, mailer.conf.example
      Uses the Python/SWIG bindings to directly query the repository
      about the changes made by a particular revision.  The program
      uses a configuration file for basic setup and to fine-tune where
      changes are delivered.  Compared to commit-email.pl, the output
      contains a bit more information about property changes, is
      smarter with binary files, and it streams its output into the
      mailer (to avoid in-memory buffering).

   3. commit-access-control.pl, commit-access-control.cfg.example
      Uses the `svnlook' program to check if check if the user that
      submitted the commit has appropriate rights to perform the
      commit on all the modified files and directories using the
      permissions specified in the configuration file.

   4. svnperms.py, svnperms.conf.example
      Similar to commit-access-control.pl, but uses a different
      syntax.  Run 'svnperms.py -h' for usage.

   5. propchange-email.pl
      Uses the `svnlook' program to send revision property change notice
      emails.  Invoke it from `repository/hook/post-revprop-change'.  Run
      the script with no arguments for usage.
