Hi,

The svnperms.py script reads the svnperms.conf file, which needs the
section rules for all the repos uniquely. This was quite tough when we
have n number if repos. I wished that svnperms.py reads regex matches
and applies the configuration rules and came up with this patch.
Mid-way of my coding work, I came to know that -s switch would let us
specify the section name explicitly, but not the regex thing.
I modified the code to search for a matching section via regex, which
might be really helpfull for certain cases.
I have attached the log file and the patch file with this mail for
review.


Thanks and regards,
Prabhu
<prabh...@collab.net>

Index: tools/hook-scripts/svnperms.py
===================================================================
--- tools/hook-scripts/svnperms.py	(revision 999888)
+++ tools/hook-scripts/svnperms.py	(working copy)
@@ -227,6 +227,7 @@
 
 def check_perms(filename, section, repos, txn=None, rev=None, author=None):
     svnlook = SVNLook(repos, txn=txn, rev=rev)
+    found_repo_block = 0
     if author is None:
         author = svnlook.author()
     changes = svnlook.changed()
@@ -234,8 +235,19 @@
         config = Config(filename)
     except IOError:
         raise Error("can't read config file "+filename)
+
     if not section in config.sections():
-        raise Error("section '%s' not found in config file" % section)
+        # loop until there is a group/repo entry in the svnperms.conf file
+        for rsection in config.sections():
+            matchobj = re.match(rsection, section, re.I)
+            if matchobj:
+                section = rsection
+                found_repo_block = 1
+                break
+        if found_repo_block == 0:
+            raise Error("section '%s' not found in config file" \
+                          % section)
+
     perm = Permission()
     perm.parse_groups(config.walk("groups"))
     perm.parse_groups(config.walk(section+" groups"))
Index: tools/hook-scripts/svnperms.conf.example
===================================================================
--- tools/hook-scripts/svnperms.conf.example	(revision 999888)
+++ tools/hook-scripts/svnperms.conf.example	(working copy)
@@ -94,3 +94,9 @@
 [example5 extends example2]
 releases/[^/]+/ = *(add)
 
+#Regex based repo blocks. Order of blocks should be most relevant
+#to least relevant(So Author .* after all repo specific regexes.)
+[.*]
+trunk/.* = user8(add,update)
+tags/[^/]+/ = @group1(add)
+branches/[^/]+/.* = *(add,remove,update)
[[[
Make svnperms.py to accept repo section names via regex rather than absolute.
* tools/hook-scripts/svnperms.py
  (check_perms): If absolute section is not found, try to find it by
   matching as a regex.

* tools/hook-scripts/svnperms.conf.example
  (): Add some default section example.

Patch by: Prabhu Gnana Sundar <prabh...@collab.net>
]]]

Reply via email to