aboutsummaryrefslogtreecommitdiff
path: root/gitosis/group.py
diff options
context:
space:
mode:
authorTommi Virtanen <tv@eagain.net>2007-05-30 13:57:31 +0300
committerTommi Virtanen <tv@eagain.net>2007-06-04 14:16:26 +0300
commitbd1ee4fc013f169f1c052dc763c3e9ed602502c9 (patch)
tree04e054b5fe52efb1e801c4098d44bcc9359433d0 /gitosis/group.py
downloadgitosis-dakkar-bd1ee4fc013f169f1c052dc763c3e9ed602502c9.tar.gz
gitosis-dakkar-bd1ee4fc013f169f1c052dc763c3e9ed602502c9.tar.bz2
gitosis-dakkar-bd1ee4fc013f169f1c052dc763c3e9ed602502c9.zip
Initial import.
Diffstat (limited to 'gitosis/group.py')
-rw-r--r--gitosis/group.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/gitosis/group.py b/gitosis/group.py
new file mode 100644
index 0000000..0ecbb61
--- /dev/null
+++ b/gitosis/group.py
@@ -0,0 +1,42 @@
+import logging
+from ConfigParser import NoSectionError, NoOptionError
+
+def getMembership(config, user, _seen=None):
+ """
+ Generate groups ``user`` is member of, according to ``config``
+
+ :type config: RawConfigParser
+ :type user: str
+ :param _seen: internal use only
+ """
+ log = logging.getLogger('gitosis.group.getMembership')
+
+ if _seen is None:
+ _seen = set()
+
+ for section in config.sections():
+ GROUP_PREFIX = 'group '
+ if not section.startswith(GROUP_PREFIX):
+ continue
+ group = section[len(GROUP_PREFIX):]
+ if group in _seen:
+ continue
+
+ try:
+ members = config.get(section, 'members')
+ except (NoSectionError, NoOptionError):
+ members = []
+ else:
+ members = members.split()
+
+ if user in members:
+ log.debug('found %(user)r in %(group)r' % dict(
+ user=user,
+ group=group,
+ ))
+ _seen.add(group)
+ yield group
+
+ for member_of in getMembership(config, '@%s' % group,
+ _seen=_seen):
+ yield member_of