# DEFAULT section can be used to place options that can be referenced in 
# other section values with the %(option)s syntax.  Note that the svnlook
# value below is required as it is used by the script to determine the path
# to the svnlook command in order to determine the changes.  Feel free
# to create additional values here that you can reuse in other options,
# especially the command options to make it easier to maintain.
[DEFAULT]
svnlook = /usr/local/bin/svnlook
#svnauthz = /usr/local/bin/svn-tools/svnauthz
#xmllint = /usr/bin/xmllint

# The repositories section has key value pairs where the key is a pattern
# to match on the repository path and the value is a space separated list of
# rules to apply to that repository.  Multiple patterns can match and all
# unique rules will be applied.  The pattern is a Unix shell-style wildcard.
# As seen below all repositories will have the svnauthz-validate and xmllint
# rules applied and repositories in /repos or below will have admin-rw-authz
# applied.
[repositories]
#* = svnauthz-validate xmllint
#/repos/* = admin-rw-authz 

# Rules allow you define a pattern to match against which files in the
# repository to run a command against.  Rules are defined by creating a
# section name starting with 'rule:' as seen below.
#
# The pattern option is a Unix shell-style wildcard match against the
# files in the repo that the rule will be run for.  A leading / in your
# pattern will be ignored.  Paths segments are / separated regardless of
# platform.
#
# The command option is the command to run, this command will be run via
# the shell of your platform.  The following environment variables will
# be defined for you:
#  REPO  = the path of the repository for the commit.
#  TXN   = the transaction id of the commit.
#  FILE  = the name of the file that matched the pattern.
#
# IMPORTANT: AS A CONSEQUENCE OF THE USE OF THE SHELL IT IS IMPORTANT TO
# QUOTE THE ARGUMENTS OF YOUR COMMANDS.  THE FILE VARIABLE DOES CONTAIN
# USER GENERATED DATA AND SHELL METACHARACTERS ARE NOT ESCAPED FOR YOU!
#
# The following examples assume a POSIX shell, if your platform has a
# different shell you may need to adjust them.  For example on Windows
# cmd.exe uses %VARIABLENAME% instead of $VARIABLENAME to expand environment
# variables.
#
# The following rule runs the svnauthz command's validate subcommand
# for file named authz in the conf subdir if it is present in the commit.
# This is a simple way to ensure that invalid authz files are not allowed
# to be committed.
#[rule:svnauthz-validate]
#pattern = conf/authz
#command = '%(svnauthz)s' validate -t "$TXN" "$REPO" "$FILE"

# The following rule runs the svnauthz command's accessof subcommand
# for any file ending in .authz for the conf subdir and checks that the admin
# user has rw rights to the same file.  This can be used to prevent an
# authz file being committed that would remove access for the admin user.
# Note that accessof also validates the validity of the file as well as
# checking the permissions, so it's unecessary to run validate and accessof.
#[rule:admin-rw-authz]
#pattern = /conf/*.authz
#command = '%(svnauthz)s' accessof --username admin --path "$FILE" --is rw -t "$TXN" "$REPO" "$FILE"

# Use the xmllint command to validate all files ending in .xml
#[rule:xmllint]
#pattern = *.xml
#command = '%(svnlook)s' cat -t "$TXN" "$REPO" "$FILE" | '%(xmllint)s' --noout -
