#!/usr/bin/perl
################################################################################
########################LICENSE#################################################
################################################################################
#Auto PHP Checkout Script
#Copyright (C) 2006 Christopher Hotchkiss chotchki@mail.usf.edu
#
#This program is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public License
#as published by the Free Software Foundation; either version 2
#of the License, or (at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#################################################################################
# You can also view the GPL Online at http://www.gnu.org/licenses/gpl.txt
##################################################################################
##################################################################################
######################INSTALLATION################################################
##################################################################################
#Please put this script into the hooks/ directory of your svn repository and
#make it executable by running "chmod +x post-commit" on it
#
#If you want the email summary to be sent make sure you install the Mail::Sendmail
#CPAN module
##################################################################################
use strict;
use warnings;
use POSIX qw(setsid);
use Mail::Sendmail;
##################################################################################
######################CONFIGURATION###############################################
##################################################################################
#Change the settings below for your environment
##################################################################################
#The checkout location for the code
my $webdir = "/var/www/test";
#Person to recieve a summary email
my $emailaddr = "someone\@example.com"
#Location of the subversion repository (must use subverison syntax)
my $repoaddr = "file:///var/lib/svn/mmarket/trunk"
##################################################################################
##################################################################################
##########################PROGRAM CODE############################################
##################################################################################
#Daemonize so that svn doesn't timeout during a large checkout
chdir('/') or die "Can't chdir to /: $!";
umask 0;
open(STDIN, '/dev/null') or die "Can't read /dev/null: $!";
open(STDOUT, '>/dev/null') or die "Can't write to /dev/null: $!";
open(STDERR, '>/dev/null') or die "Can't write to /dev/null: $!";
defined(my $pid = fork) or die "Can't fork: $!";
exit if $pid;
setsid or die "Can't start a new session: $!";
#Everything after this is a daemonized program
#Start building the summary email
my $email = "Here is the output for the latest svn checkout \n\n\n";
#Clear out the temp directories so that svn does complain
$email .= `rm -vrf $webdir`;
$email .= "\n\n\n";
#Export the subversion code to the checkout directory
$email .= `svn export $repoaddr $webdir`;
$email .= "\n\n\n";
##################################################################################
##################################################################################
##########################OPTIONAL STEPS##########################################
##################################################################################
#This next part is where you put any code that needs to be run before the program
#is considered to be fully deployed. I am including my steps as an example, yours
#will probably be very different, you have been warned!!!!
##################################################################################
#Rebuild the php cache autoload
#chdir($webdir);
#$email .= `$webdir/symfony.sh cc frontend config`;
#$email .= "\n\n\n";
#Load the database
#chdir("$webdir/batch");
#$email .= `php load_data.php`;
#$email .= "\n\n\n";
#Reload apache if php accelerators are installed (requires extra sudo setup)
#`sudo /etc/init.d/apache2 start`;
#Run the javascript build files
#chdir("$webdir/build");
#$email .= `phing -f ajax.xml ajax`;
#$email .= "\n\n\n";
##################################################################################
##################################################################################
##########################EMAIL OUTPUT############################################
##################################################################################
#Send the command output
my %mail = (
To => $emailaddr,
From => 'root',
Message => $email
);
sendmail(%mail)or die $Mail::Sendmail::error;
print "OK. Log says:\n", $Mail::Sendmail::log;
##################################################################################