From 65dc130228fe3084a7a29aca8652a04d10379bdf Mon Sep 17 00:00:00 2001 From: Tommi Virtanen Date: Mon, 4 Jun 2007 14:22:48 +0300 Subject: [PATCH] Everyone always belongs to group "all". --- gitosis/group.py | 39 +++++++++++++++++++++++--------------- gitosis/test/test_group.py | 13 +++++++++++++ 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/gitosis/group.py b/gitosis/group.py index 0ecbb61..975bbc5 100644 --- a/gitosis/group.py +++ b/gitosis/group.py @@ -1,25 +1,15 @@ 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 - """ +def _getMembership(config, user, seen): 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: + if group in seen: continue try: @@ -34,9 +24,28 @@ def getMembership(config, user, _seen=None): user=user, group=group, )) - _seen.add(group) + seen.add(group) yield group - for member_of in getMembership(config, '@%s' % group, - _seen=_seen): + for member_of in _getMembership( + config, '@%s' % group, seen, + ): yield member_of + + +def getMembership(config, user): + """ + Generate groups ``user`` is member of, according to ``config`` + + :type config: RawConfigParser + :type user: str + :param _seen: internal use only + """ + + seen = set() + for member_of in _getMembership(config, user, seen): + yield member_of + + # everyone is always a member of group "all" + yield 'all' + diff --git a/gitosis/test/test_group.py b/gitosis/test/test_group.py index c282661..9ea035a 100644 --- a/gitosis/test/test_group.py +++ b/gitosis/test/test_group.py @@ -7,12 +7,14 @@ from gitosis import group def test_no_emptyConfig(): cfg = RawConfigParser() gen = group.getMembership(config=cfg, user='jdoe') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_no_emptyGroup(): cfg = RawConfigParser() cfg.add_section('group hackers') gen = group.getMembership(config=cfg, user='jdoe') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_no_notListed(): @@ -20,6 +22,7 @@ def test_no_notListed(): cfg.add_section('group hackers') cfg.set('group hackers', 'members', 'wsmith') gen = group.getMembership(config=cfg, user='jdoe') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_yes_simple(): @@ -28,6 +31,7 @@ def test_yes_simple(): cfg.set('group hackers', 'members', 'jdoe') gen = group.getMembership(config=cfg, user='jdoe') eq(gen.next(), 'hackers') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_yes_leading(): @@ -36,6 +40,7 @@ def test_yes_leading(): cfg.set('group hackers', 'members', 'jdoe wsmith') gen = group.getMembership(config=cfg, user='jdoe') eq(gen.next(), 'hackers') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_yes_trailing(): @@ -44,6 +49,7 @@ def test_yes_trailing(): cfg.set('group hackers', 'members', 'wsmith jdoe') gen = group.getMembership(config=cfg, user='jdoe') eq(gen.next(), 'hackers') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_yes_middle(): @@ -52,6 +58,7 @@ def test_yes_middle(): cfg.set('group hackers', 'members', 'wsmith jdoe danny') gen = group.getMembership(config=cfg, user='jdoe') eq(gen.next(), 'hackers') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_yes_recurse_one(): @@ -63,6 +70,7 @@ def test_yes_recurse_one(): gen = group.getMembership(config=cfg, user='jdoe') eq(gen.next(), 'smackers') eq(gen.next(), 'hackers') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_yes_recurse_one_ordering(): @@ -74,6 +82,7 @@ def test_yes_recurse_one_ordering(): gen = group.getMembership(config=cfg, user='jdoe') eq(gen.next(), 'smackers') eq(gen.next(), 'hackers') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_yes_recurse_three(): @@ -91,6 +100,7 @@ def test_yes_recurse_three(): eq(gen.next(), 'snackers') eq(gen.next(), 'smackers') eq(gen.next(), 'hackers') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_yes_recurse_junk(): @@ -102,6 +112,7 @@ def test_yes_recurse_junk(): gen = group.getMembership(config=cfg, user='jdoe') eq(gen.next(), 'smackers') eq(gen.next(), 'hackers') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_yes_recurse_loop(): @@ -113,6 +124,7 @@ def test_yes_recurse_loop(): gen = group.getMembership(config=cfg, user='jdoe') eq(gen.next(), 'smackers') eq(gen.next(), 'hackers') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next) def test_no_recurse_loop(): @@ -122,4 +134,5 @@ def test_no_recurse_loop(): cfg.add_section('group smackers') cfg.set('group smackers', 'members', '@hackers') gen = group.getMembership(config=cfg, user='jdoe') + eq(gen.next(), 'all') assert_raises(StopIteration, gen.next)