From 0a92ac2e90d730ba61d9a7d3f39c99d9c85eb861 Mon Sep 17 00:00:00 2001
From: Julian Blake Kongslie <jblake@omgwallhack.org>
Date: Mon, 19 Jul 2010 02:31:05 -0700
Subject: Use Piny::Repo to destroy repos.

---
 usr/src/libpiny/debian/changelog |  6 ++++
 usr/src/pinyadmin/debian/control |  2 +-
 usr/src/pinyadmin/sbin/rmrepo    | 63 +++++++---------------------------------
 3 files changed, 17 insertions(+), 54 deletions(-)

(limited to 'usr/src')

diff --git a/usr/src/libpiny/debian/changelog b/usr/src/libpiny/debian/changelog
index fc1ae42..3dcd6c4 100644
--- a/usr/src/libpiny/debian/changelog
+++ b/usr/src/libpiny/debian/changelog
@@ -1,3 +1,9 @@
+libpiny-perl (0.11) unstable; urgency=low
+
+  * Destroying dead repos.
+
+ -- Julian Blake Kongslie <jblake@omgwallhack.org>  Mon, 19 Jul 2010 02:30:01 -0700
+
 libpiny-perl (0.10) unstable; urgency=low
 
   * Support for the global /etc/piny.conf stuff.
diff --git a/usr/src/pinyadmin/debian/control b/usr/src/pinyadmin/debian/control
index 950a6c9..ea2b073 100644
--- a/usr/src/pinyadmin/debian/control
+++ b/usr/src/pinyadmin/debian/control
@@ -7,7 +7,7 @@ Standards-version: 3.8.4
 
 Package: pinyadmin
 Architecture: all
-Depends: ${perl:Depends}, ${misc:Depends}, libpiny-perl (>= 0.9)
+Depends: ${perl:Depends}, ${misc:Depends}, libpiny-perl (>= 0.11)
 Description: Administrative programs for piny
  The command-line programs for day-to-day administrative tasks in the Piny
  infrastructure.
diff --git a/usr/src/pinyadmin/sbin/rmrepo b/usr/src/pinyadmin/sbin/rmrepo
index 864830f..8b26feb 100755
--- a/usr/src/pinyadmin/sbin/rmrepo
+++ b/usr/src/pinyadmin/sbin/rmrepo
@@ -3,62 +3,19 @@
 use strict;
 use warnings;
 
-my( $reponame, $uid, $gitowner, $wikilisttempfile, $cgitrctempfile);
+use Piny;
 
-if ( ( ! scalar $ARGV[0] ) or ( scalar $ARGV[1] ) or ( $ARGV[0] !~ /^[a-z0-9][a-z0-9-]+$/ ) ) {
-  print( "Usage: rmrepo REPONAME\n" );
-  exit( 1 );
-} else {
-  $reponame = $ARGV[0];
-};
-
-open (PASSWD, '/etc/passwd');
-while(<PASSWD>) {
-  if( $_ =~ /^$ENV{SUDO_USER}:.+?:(.+?):/ ) { $uid = $1; }; # grabbing uid.
-};
-close(PASSWD);
-
-unless( -d "/srv/git/$reponame.git" ) {
-  print( "/srv/git/$reponame.git doesn't exist!\n" );
-  exit( 2 );
-};
-
-$gitowner = (stat "/srv/git/$reponame.git")[4];
+my $env = Piny::Environment->new;
 
-if( ( $gitowner != $uid ) and ( $gitowner != 65534 ) ) {
-  print( "$reponame is not owned by you!\n" );
-  exit( 3 );
-};
-
-# We have to be careful about how we delete things; we don't want have post-update or ikiwiki.cgi thrashing, and we REALLY don't want to leave remappable owner UIDs around, but we're also keying security on /srv/git/$reponame
-system( "/bin/chown -R nobody.nogroup /srv/git/$reponame.git" );
-
-unlink( "/etc/ikiwiki/wikilist.d/$reponame" );
-$wikilisttempfile = `/bin/mktemp`;
-chomp ( $wikilisttempfile );
-chmod ( 0644, $wikilisttempfile );
-system( "/bin/cat /etc/ikiwiki/wikilist.d/* > $wikilisttempfile" );
-system( "/bin/mv $wikilisttempfile /etc/ikiwiki/wikilist" ); # This is marginally racy, but the consequences are probably ignorable.
+foreach my $reponame ( @ARGV ) {
 
-unlink( "/etc/cgitrc.d/$reponame" );
-$cgitrctempfile = `/bin/mktemp`;
-chomp ( $cgitrctempfile );
-chmod ( 0644, $cgitrctempfile );
-system( "/bin/cat /etc/cgitrc.d/* > $cgitrctempfile" );
-system( "/bin/mv $cgitrctempfile /etc/cgitrepos" ); # This is marginally racy, but the consequences are probably ignorable.
+  my $repo = Piny::Repo->new( $reponame );
 
-system( "/bin/rm -r /srv/www/piny.be/$reponame" );
-system( "/bin/rm -r /srv/www/secure.piny.be/repos/$reponame" );
+  if ( $repo->owner->uid != $env->user->uid ) {
+    print STDERR "You are not the owner of $reponame!\n";
+    exit 1;
+  };
 
-unlink( "/etc/ikiwiki/piny/$reponame.setup" );
-system( "/bin/rm -r /srv/ikiwiki/$reponame" );
+  $repo->destroy;
 
-unlink( "/etc/apache2/piny-available/$reponame" );
-unlink( "/etc/apache2/piny-enabled/$reponame" );
-system( '/etc/init.d/apache2 reload | grep -v "Reloading web server config: apache2."' );
-
-system( "/usr/sbin/delgroup --quiet git-$reponame" );
-system( "/usr/sbin/deluser --quiet --remove-home ikiwiki-$reponame" );
-system( "/usr/sbin/delgroup --quiet ikiwiki-$reponame" );
-
-system( "/bin/rm -rf /srv/git/$reponame.git" );
+};
-- 
cgit v1.2.3