gitolite/src/commands/info
2012-03-24 10:30:44 +05:30

62 lines
1.4 KiB
Perl
Executable file

#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
use lib $ENV{GL_BINDIR};
use Gitolite::Rc;
use Gitolite::Common;
use Gitolite::Conf::Load;
=for usage
Usage: gitolite info [-p] [optional repo name pattern]
List all repos/repo groups you can access. By default, it shows you what the
conf file specified, which means group names and wild card patterns may show
up.
With '-p' it looks at actual (physical) repos instead.
The optional pattern is an unanchored regex that will limit the repos
searched, in both cases. It might speed up things a little if you have more
than a few thousand repos.
=cut
my ( $help, $phy, $patt ) = ('') x 3;
GetOptions(
'p' => \$phy,
'h' => \$help,
) or usage();
usage() if @ARGV > 1 or $help;
$patt = shift || '.';
my $user = $ENV{GL_USER} or _die "GL_USER not set";
my $ref = 'any';
print "hello $user, this is gitolite3 " . version() . " on git " . substr( `git --version`, 12 ) . "\n";
my $lr = lister_dispatch('list-repos');
my $perm;
my $repos;
if ($phy) {
_chdir( $rc{GL_REPO_BASE} );
$repos = list_phy_repos(1);
} else {
$repos = $lr->();
}
for my $repo (@$repos) {
next unless $repo =~ /$patt/;
my $perm = '';
for my $aa (qw(R W ^C)) {
my $ret = access( $repo, $user, $aa, $ref );
$perm .= ( $ret =~ /DENIED/ ? " " : " $aa" );
}
$perm =~ s/\^//;
print "$perm\t$repo\n" if $perm =~ /\S/;
}