diff --git a/src/Gitolite/Conf/Load.pm b/src/Gitolite/Conf/Load.pm index 72db4de..071b3d0 100644 --- a/src/Gitolite/Conf/Load.pm +++ b/src/Gitolite/Conf/Load.pm @@ -232,6 +232,7 @@ sub load_1 { my @repos = memberships( 'repo', $repo ); my @users = memberships( 'user', $user, $repo ); + dbg(\@users); trace( 3, "memberships: " . scalar(@repos) . " repos and " . scalar(@users) . " users found" ); for my $r (@repos) { @@ -296,6 +297,8 @@ sub memberships { push @ret, user_roles( $base, $repo, @ret ); } + push @ret, @{ ext_grouplist($base) } if $type eq 'user' and $rc{GROUPLIST_PGM}; + @ret = @{ sort_u( \@ret ) }; trace( 3, sort @ret ); return @ret; @@ -385,6 +388,20 @@ sub creator { return $creator; } +{ + my %cache = (); + + sub ext_grouplist { + my $user = shift; + my $pgm = $rc{GROUPLIST_PGM}; + return [] if not $pgm; + + return $cache{$user} if $cache{$user}; + my @extgroups = map { s/^@?/@/; $_; } split ' ', `$rc{GROUPLIST_PGM} $user`; + return ($cache{$user} = \@extgroups); + } +} + # ---------------------------------------------------------------------- # api functions # ----------------------------------------------------------------------