# This is a sample configuration file for commit-access-control.pl.
#
# $Id$
#
# This file uses the Windows ini style, where the file consists of a
# number of sections, each section starts with a unique section name
# in square brackets.  Parameters in each section are specified as
# Name = Value.  Any spaces around the equal sign will be ignored.  If
# there are multiple sections with exactly the same section name, then
# the parameters in those sections will be added together to produce
# one section with cumulative parameters.
#
# The commit-access-control.pl script reads these sections in order,
# so later sections may overwrite permissions granted or removed in
# previous sections.
#
# Each section has three valid parameters.  Any other parameters are
# ignored.
#   access = (read-only|read-write)
#
#     This parameter is a required parameter.  Valid values are
#     `read-only' and `read-write'.
#
#      The access rights to apply to modified files and directories
#      that match the `match' regular expression described later on.
#
#   match = PERL_REGEX
#
#     This parameter is a required parameter and its value is a Perl
#     regular expression.
#
#     To help users that automatically write regular expressions that
#     match the beginning of absolute paths using ^/, the script
#     removes the / character because subversion paths, while they
#     start at the root level, do not begin with a /.
#
#  users = username1 [username2 [username3 [username4 ...]]]
#    or
#  users = username1 [username2]
#  users = username3 username4
#
#     This parameter is optional.  The usernames listed here must be
#     exact usernames.  There is no regular expression matching for
#     usernames.  You may specify all the usernames that apply on one
#     line or split the names up on multiple lines.
#
#     The access rights from `access' are applied to ALL modified
#     paths that match the `match' regular expression only if NO
#     usernames are specified in the section or if one of the listed
#     usernames matches the author of the commit.
#
# By default, because you're using commit-access-control.pl in the
# first place to protect your repository, the script sets the
# permissions to all files and directories in the repository to
# read-only, so if you want to open up portions of the repository,
# you'll need to edit this file.
#
# NOTE: NEVER GIVE DIFFERENT SECTIONS THE SAME SECTION NAME, OTHERWISE
# THE PARAMETERS FOR THOSE SECTIONS WILL BE MERGED TOGETHER INTO ONE
# SECTION AND YOUR SECURITY MAY BE COMPROMISED.

[Make everything read-only for all users]
match   = .*
access  = read-only

[Make project1 read-write for users Jane and Joe]
match  = ^(branches|tags|trunk)/project1
users  = jane joe
access = read-write

[However, we don't trust Joe with project1's Makefile]
match  = ^(branches|tags|trunk)/project1/Makefile
users  = joe
access = read-only
