## Example configuration file for svnperms.py. ##

# $Id$
#
# Multiple global [groups] sections are accepted, but be aware
# that it's the same as concatenating them all in a single entry.
# You can also create section specific groups, using a syntax
# like [sectionname groups].
#
[groups]
group1 = user1 user2 user3
group2 = user4 user5
supergroup = @group1 @group2 user6

#
# Example repository control, showing allowed syntax.
#
# - the latest match is what counts
# - groups are prefixed by "@"
# - you can use groups and users in the same definition
# - all permissions may be revoked with ()
# - line breaks are accepted
#
[example1 groups]
group3 = user9 user10

[example1]
trunk/.* = *(add,remove,update) @group1,user4,user5(update)
           user6,user7()
trunk/.* = user8(add,update)
tags/[^/]+/ = @group3(add)
branches/[^/]+/.* = *(add,remove,update)

#
# One of the most used repository structures, for a single project.
#
[example2]
trunk/.* = *(add,remove,update)
tags/[^/]+/ = *(add)
branches/[^/]+/.* = *(add,remove,update)

#
# Another common structure, expecting a project name inside the repository
# (like trunk/myproject/ and tags/myproject/). In this example, only admins
# are allowed to create projects, and there are project specific access
# lists.
#
[example3 groups]
admins = john
project1 = user1 user2
project2 = user3 user4

[example3]
trunk/[^/]+/ = @admins(add,remove)
trunk/project1/.+ = @project1(add,remove,update)
trunk/project2/.+ = @project2(add,remove,update)
tags/[^/]+/ = @admins(add,remove)
tags/project1/[^/]+/ = @project1(add,remove)
tags/project2/[^/]+/ = @project2(add,remove)
branches/[^/]+/ = @admins(add,remove)
branches/project1/[^/]+/.* = @project1(add,remove,update)
branches/project2/[^/]+/.* = @project2(add,remove,update)

#
# A more complex structure, as defined in the following URL:
#
# http://moin.conectiva.com.br/RepositorySystem
#
[example4 groups]
admins = user1 user2
updaters = user3

[example4]
snapshot/[^/]+/(current/(SPECS/|SOURCES/)?)? = *(add)
snapshot/[^/]+/ = @admins(add,remove)
snapshot/[^/]+/current/SPECS/[^/]+\.spec = *(add,remove,update)
snapshot/[^/]+/current/SOURCES/[^/]+ = *(add,remove,update)
snapshot/[^/]+/releases/[^/]+/([^/+]/)? = autouser(add)
snapshot/[^/]+/pristine/ = autouser(add,remove)
branches/[^/]+/.* = *(add,remove,update)
releases/[^/]+/ = @admins(add)
tags/[^/]+/ = *(add,remove)
updates/[^/]+/[^/]+/(current/(SPECS/|SOURCES/)?)? = @updaters,autouser(add)
updates/[^/]+/[^/]+/current/SPECS/[^/]+\.spec = @updaters,autouser(add,update)
updates/[^/]+/[^/]+/current/SOURCES/[^/]+ = @updaters,autouser(add,remove,update)
updates/[^/]+/[^/]+/releases/.* = autouser(add)
updates/[^/]+/[^/]+/pristine/ = autouser(add,remove)

#
# Sections can inherit settings from previously defined sections, using
# the "extends" keyword in the section declaration.  In this example, 
# the [example5] section inherits all the settings from [example2], and 
# adds a new setting for a releases directory which behaves like the 
# tags directory.
#
[example5 extends example2]
releases/[^/]+/ = *(add)

