summaryrefslogtreecommitdiff
path: root/usr/src/libpiny/lib/Piny/Repo.pm
diff options
context:
space:
mode:
authorJulian Blake Kongslie <jblake@omgwallhack.org>2010-06-29 22:38:57 -0700
committerJulian Blake Kongslie <jblake@omgwallhack.org>2010-06-29 22:38:57 -0700
commit5e4e9675d39413c22568100372bc82f07495a700 (patch)
treefe1b42c0f01d8fa4b6d212a533b15f37da09e80d /usr/src/libpiny/lib/Piny/Repo.pm
parentab8af2c84e3e5dc8bfb8bc5f9d2225b93e6b18d3 (diff)
downloadpiny-code-5e4e9675d39413c22568100372bc82f07495a700.tar.gz
piny-code-5e4e9675d39413c22568100372bc82f07495a700.zip
First run at lsaccess and lsrepo.
Diffstat (limited to 'usr/src/libpiny/lib/Piny/Repo.pm')
-rw-r--r--usr/src/libpiny/lib/Piny/Repo.pm22
1 files changed, 22 insertions, 0 deletions
diff --git a/usr/src/libpiny/lib/Piny/Repo.pm b/usr/src/libpiny/lib/Piny/Repo.pm
index 6dcabca..26d936a 100644
--- a/usr/src/libpiny/lib/Piny/Repo.pm
+++ b/usr/src/libpiny/lib/Piny/Repo.pm
@@ -99,6 +99,12 @@ sub remove_access {
$s->group( )->remove_member( @users );
};
+sub has_access {
+ my ( $s, $user ) = @_;
+
+ return $s->owner( )->uid( ) == $user->uid( ) or $user->has_group( $s->group( ) );
+};
+
# Triggers
sub _rename_repo {
@@ -132,6 +138,22 @@ sub _change_owner {
find( { wanted => sub { chown( $new_owner->uid( ), -1, $_ ) or die "Couldn't chown $_: $!"; }, no_chdir => 1 }, $s->path( ) );
};
+# Class methods
+
+sub all_repos {
+ my ( $class, $dir ) = @_;
+
+ $dir = "/srv/git" unless defined $dir;
+
+ my @ret;
+
+ find( { wanted => sub { print "$_\n"; if ( /^[^.].*\.git$/ ) { $File::Find::prune = 1; push( @ret, $File::Find::name ); }; } }, $dir );
+
+ @ret = map { print "$_ "; s/^\Q$dir\E\/?//; s/\.git$//; print "$_\n"; $class->new( name => $_ ); } @ret;
+
+ return @ret;
+};
+
# Builder methods
# If constructed with just one argument, then treat it as a repo name.