#!/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 [-lc] [] 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. Example, if the conf file looked like this: @oss = git gitolite linux repo @oss RW+ = YourName then running 'ssh git@host info' will only show you '@oss'. '-p' looks at actual (physical) repos instead; in our example this will show you git, gitolite, and linux. '-lc' lists creators as an additional field at the end; this option is only available with '-p'. 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, $lc, $patt ) = ('') x 4; GetOptions( 'lc' => \$lc, 'p' => \$phy, 'h' => \$help, ) or usage(); usage("'-lc' requires '-p'") if $lc and not $phy; usage() if @ARGV > 1 or $help; $patt = shift || '.'; my $user = $ENV{GL_USER} or _die "GL_USER not set"; my $ref = 'any'; chomp(my $hn = `hostname -s`); my $gv = substr( `git --version`, 12 ); print "hello $user, this is $ENV{USER}\@$hn running gitolite3 " . version() . " on git $gv\n"; my $lr = lister_dispatch('list-repos'); my $perm; my $repos; my @aa; if ($phy) { _chdir( $rc{GL_REPO_BASE} ); $repos = list_phy_repos(1); @aa = qw(R W); } else { $repos = $lr->(); @aa = qw(R W ^C); } my $creator = ''; for my $repo (@$repos) { next unless $repo =~ /$patt/; my $perm = ''; $creator = creator($repo) if $lc; for my $aa (@aa) { my $ret = access( $repo, $user, $aa, $ref ); $perm .= ( $ret =~ /DENIED/ ? " " : " $aa" ); } $perm =~ s/\^//; next unless $perm =~ /\S/; print "$perm\t$repo"; print "\t$creator" if $lc; print "\n"; } print "\n$rc{SITE_INFO}\n" if $rc{SITE_INFO};