cvs: SVNROOT / commit-email.php

From: Date: Mon, 10 Nov 2008 21:19:10 +0000
Subject: cvs: SVNROOT / commit-email.php
Groups: svn.migration 
Request: Send a blank email to svn-migration+get-130@lists.php.net to get a copy of this message
gwynne Mon Nov 10 21:19:10 2008 UTC Added files: /SVNROOT commit-email.php Log: commit e-mail script http://cvs.php.net/viewvc.cgi/SVNROOT/commit-email.php?view=markup&rev=1.1 Index: SVNROOT/commit-email.php +++ SVNROOT/commit-email.php <?php // ----------------------------------------------------------------------------------------------------------------------------- // Settings error_reporting(E_ALL | E_STRICT); date_default_timezone_set('UTC'); // ----------------------------------------------------------------------------------------------------------------------------- // Constants $version = substr('$Revision: 1.1 $', strlen('$Revision: '), -2); $email_to = array('gwynne@php.net'); $smtp_server = '127.0.0.1'; // ----------------------------------------------------------------------------------------------------------------------------- // Version check if (version_compare('5.2.0', PHP_VERSION, '>')) { die("Requires at least PHP 5.2.\n"); } // ----------------------------------------------------------------------------------------------------------------------------- // Arguments if ($argc != 3) { die("Pass exactly two arguments: REPOS and REV.\n"); } $REPOS = $argv[1]; $REV = $argv[2]; // ----------------------------------------------------------------------------------------------------------------------------- // Utility function run_svnlook($command) { exec('exec svnlook ' . escapeshellarg($command) . ' -r ' . escapeshellarg($GLOBALS['REV']) . ' ' . escapeshellarg($GLOBALS['REPOS']), $output, $status); if ($status != 0) { die("svnlook failed with exit code {$status}\nOutput:\n" . implode("\n", $output) . "\n"); } return $output; } // ----------------------------------------------------------------------------------------------------------------------------- // Get info from commit $commit_info = run_svnlook('info'); $commit_user = $commit_info[0]; $commit_date = strtotime(substr($commit_info[1], 0, strlen("0000-00-00 00:00:00 +0000"))); $commit_log = implode("\n", array_slice($commit_info, 3)); // ----------------------------------------------------------------------------------------------------------------------------- // Determine "from" address // Various repositories can play with this to read from their equivelant of the old cvsusers folder, or whatever else they like $from = 'svn@svn.php.net'; // ----------------------------------------------------------------------------------------------------------------------------- // Build list of changes $changed_paths = run_svnlook('changed'); // ----------------------------------------------------------------------------------------------------------------------------- // Get diffs $diffs = run_svnlook('diff'); $diffs = implode("\n", $diffs); // ----------------------------------------------------------------------------------------------------------------------------- // Parent changed path $dirs_changed = run_svnlook('dirs-changed'); $parent_path = $dirs_changed[0]; foreach ($dirs_changed as $dir_changed) { if (strlen($dir_changed) < strlen($parent_path)) { $parent_path = $dir_changed; } } // ----------------------------------------------------------------------------------------------------------------------------- // Build e-mail $msg_headers = "From: {$from}\n" . "To: " . implode(', ', $email_to) . "\n" . "Message-ID: <svn{$commit_user}{$commit_date}@svn.php.net>\n" . "Date: " . date(DATE_RFC822, $commit_date) . "\n" . "Subject: svn: {$parent_path}\n"; $msg_body = "{$commit_user}\t\t" . date(DATE_RFC2822, $commit_date) . "\n" . "\n" . "Changed paths:\n" . "\t" . implode("\n\t", $changed_paths) . "\n" . "\n" . "Log:\n" . wordwrap($commit_log, 80, "\n") . "\n" . "\n"; if (strlen($diffs) >= 8000) { $boundary = $commit_user. $commit_date; $msg_headers .= "MIME-Version: 1.0\n" . "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\n"; $msg_body = "This is a MIME encoded message.\n\n--{$boundary}\n" . "Content-Type: text/plain\n" . "\n" . "{$msg_body}\n" . "--{$boundary}\n" . "Content-Type: text/plain\n" . "Content-Disposition: attachment; filename=\"{$boundary}.txt\"\n" . "\n" . "{$diffs}\n" . "--{$boundary}--\n"; } else { $msg_body .= $diffs; } $complete_email = $msg_headers . "\n" . $msg_body; $complete_email = str_replace(array("\r", "\n", "\r\n."), array("", "\r\n", ".."), $complete_email); // ----------------------------------------------------------------------------------------------------------------------------- // Send e-mail if (isset($_ENV['DEBUG']) && $_ENV['DEBUG'] == 'DEBUG') { $socket = fopen("php://stdout", "w"); } else { $socket = fsockopen($smtp_server, getservbyname('smtp', 'tcp'), $errno); } if ($socket === FALSE) { die("Couldn't connect to SMTP server {$smtp_server}. Errno: {$errno}.\n"); } fwrite($socket, "HELO svnserver\r\n" . "MAIL FROM:<this-will-bounce@php.net>\r\n"); foreach ($email_to as $send_addr) { fwrite($socket, "RCPT TO:<{$email_to}>\r\n"); } fwrite($socket, "DATA\r\n" . $complete_email . "\r\n" . ".\r\n" . "QUIT\r\n"); fclose($socket); // ----------------------------------------------------------------------------------------------------------------------------- // Done! exit(0); ?>

« previous svn.migration (#130) next »