diff options
author | Tommi Virtanen <tv@eagain.net> | 2007-05-30 13:57:31 +0300 |
---|---|---|
committer | Tommi Virtanen <tv@eagain.net> | 2007-06-04 14:16:26 +0300 |
commit | bd1ee4fc013f169f1c052dc763c3e9ed602502c9 (patch) | |
tree | 04e054b5fe52efb1e801c4098d44bcc9359433d0 /gitosis/group.py | |
download | gitosis-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.py | 42 |
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 |