cvs: SVNROOT / commit-email.php post-commit run-conversion.php
| From: | Gwynne Raskind | Date: | Fri, 12 Dec 2008 04:20:25 +0000 |
| Subject: | cvs: SVNROOT / commit-email.php post-commit run-conversion.php | ||
| Groups: | svn.migration | ||
| Request: | Send a blank email to svn-migration+get-160@lists.php.net to get a copy of this message | ||
gwynne Fri Dec 12 04:20:25 2008 UTC
Added files:
/SVNROOT post-commit
Modified files:
/SVNROOT commit-email.php run-conversion.php
Log:
add post-commit as a separate file to update SVNROOT as necessary, commit-email should contain
email to addresses and is called from post-commit
http://cvs.php.net/viewvc.cgi/SVNROOT/commit-email.php?r1=1.3&r2=1.4&diff_format=u Index: SVNROOT/commit-email.php diff -u SVNROOT/commit-email.php:1.3 SVNROOT/commit-email.php:1.4 --- SVNROOT/commit-email.php:1.3 Mon Dec 8 21:01:22 2008 +++ SVNROOT/commit-email.php Fri Dec 12 04:20:25 2008 @@ -1,41 +1,100 @@ #!/usr/local/bin/php <?php -// ----------------------------------------------------------------------------------------------------------------------------- -// Settings -error_reporting(E_ALL | E_STRICT); -date_default_timezone_set('UTC'); +// Note that this script is intended to be called from inside the post-commit +// hook. It makes some assumptions: $REPOS and $REV are defined, the +// run_svnlook() function is declared, $changed_paths and $dirs_changed are +// determined. // ----------------------------------------------------------------------------------------------------------------------------- // Constants -$version = substr('$Revision: 1.3 $', strlen('$Revision: '), -2); -$email_to = array('gwynne@php.net'); +$version = substr('$Revision: 1.4 $', strlen('$Revision: '), -2); $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; -} +$commit_email_list = array( + // FastCGI ISAPI + '|^php/fastcgi-isapi|' => array('shane@php.net', 'wez@php.net', 'edink@php.net'), + + // GTK + '|^gtk/php-gtk-web|' => array('gtk-webmaster@php.net'), + '|^gtk/php-gtk-doc|' => array('php-gtk-doc@lists.php.net'), + '|^gtk/php-gtk|' => array('php-gtk-cvs@lists.php.net'), + + // Web + '|^web/bugtracker|' => array('php-webmaster@lists.php.net'), + '|^web/presentations|' => array('pres@lists.php.net'), + '|^web/pres2|' => array('pres@lists.php.net'), + '|^web/php-|' => array('php-webmaster@lists.php.net'), + + // Zend/TSRM + '|^php/ZendAPI|' => array('zend-engine-cvs@lists.php.net', 'doc-cvs@lists.php.net'), + '|^php/php-src/ZendEngine2|' => array('zend-engine-cvs@lists.php.net'), + '|^php/php-src/TSRM|' => array('zend-engine-cvs@lists.php.net'), + + // phpdoc + '|^phpdoc/doc-base|' => array('doc-cvs@lists.php.net'), + '|^phpdoc/ar|' => array('doc-ar@lists.php.net'), + '|^phpdoc/bg|' => array('doc-bg@lists.php.net'), + '|^phpdoc/ca|' => array('doc-ca@lists.php.net'), + '|^phpdoc/cs|' => array('doc-cs@lists.php.net'), + '|^phpdoc/da|' => array('doc-da@lists.php.net'), + '|^phpdoc/de|' => array('doc-de@lists.php.net'), + '|^phpdoc/el|' => array('doc-el@lists.php.net'), + '|^phpdoc/es|' => array('doc-es@lists.php.net'), + '|^phpdoc/fa|' => array('doc-fa@lists.php.net'), + '|^phpdoc/fi|' => array('doc-fi@lists.php.net'), + '|^phpdoc/fr|' => array('doc-fr@lists.php.net'), + '|^phpdoc/he|' => array('doc-he@lists.php.net'), + '|^phpdoc/hk|' => array('doc-hk@lists.php.net'), + '|^phpdoc/hu|' => array('doc-hu@lists.php.net'), + '|^phpdoc/id|' => array('doc-id@lists.php.net'), + '|^phpdoc/it|' => array('doc-it@lists.php.net'), + '|^phpdoc/ja|' => array('doc-ja@lists.php.net'), + '|^phpdoc/kr|' => array('doc-kr@lists.php.net'), + '|^phpdoc/lt|' => array('doc-lt@lists.php.net'), + '|^phpdoc/nl|' => array('doc-nl@lists.php.net'), + '|^phpdoc/no|' => array('doc-no@lists.php.net'), + '|^phpdoc/pl|' => array('doc-pl@lists.php.net'), + '|^phpdoc/pt_BR|' => array('doc-pt-br@lists.php.net'), + '|^phpdoc/pt|' => array('doc-pt@lists.php.net'), + '|^phpdoc/ro|' => array('doc-ro@lists.php.net'), + '|^phpdoc/ru|' => array('doc-ru@lists.php.net'), + '|^phpdoc/sk|' => array('doc-sk@lists.php.net'), + '|^phpdoc/sl|' => array('doc-sl@lists.php.net'), + '|^phpdoc/sv|' => array('doc-sv@lists.php.net'), + '|^phpdoc/tr|' => array('doc-tr@lists.php.net'), + '|^phpdoc/tw|' => array('doc-tw@lists.php.net'), + '|^phpdoc/zh|' => array('doc-zh@lists.php.net'), + '|^phd|' => array('doc-cvs@list.php.net'), + '|^web/doc|' => array('doc-web@lists.php.net'), + + // PEAR + '|^pear/pearbot|' => array('pear-cvs@lists.php.net'), + '|^pear/peardoc/en/pecl|' => array('pear-doc@lists.php.net', 'doc-cvs@lists.php.net'), + '|^pear/peardoc|' => array('pear-doc@lists.php.net'), + '|^pear/pear-core|' => array('pear-cvs@lists.php.net', 'pear-core@lists.php.net'), + '|^pear/modules/installphars|' => array('pear-core@lists.php.net'), + '|^pear/modules|' => array('pear-cvs@lists.php.net'), + + // PECL + '|^php-src/pecl|' => array('pecl-cvs@lists.php.net'), + + // QA-web + '|^web/qa|' => array('php-qa@lists.php.net'), + + // GD + '|^gd|' => array('gd-cvs@lists.php.net'), + + // Misc + '|^php/php-lang|' => array('php-lang@lists.php.net'), + '|^web/embed|' => array('embed-cvs@lists.php.net'), + '|^php/php-objc|' => array('php-objc@lists.php.net'), + + // Internals + '|^systems|' => array('systems@php.net'), + '|^SVNROOT|' => array('svn-migration@lists.php.net'), + + '|^.|' => array('php-cvs@lists.php.net') +); // ----------------------------------------------------------------------------------------------------------------------------- // Get info from commit @@ -50,8 +109,21 @@ $from = 'svn@svn.php.net'; // ----------------------------------------------------------------------------------------------------------------------------- -// Build list of changes -$changed_paths = run_svnlook('changed'); +// Build list of e-mail addresses and parent changed path +$emails_to = array(); +$parent_path = $dirs_changed[0]; + +foreach ($dirs_changed as $changed_path) { + foreach ($commit_email_list as $regex => $email_list) { + if (preg_match($regex, $changed_path, $matches) === 1) { + $emails_to = array_merge($emails_to, $email_list); + } + } + if (strlen($changed_path) < strlen($parent_path)) { + $parent_path = $changed_path; + } +} +$emails_to = array_unique($emails_to); // ----------------------------------------------------------------------------------------------------------------------------- // Get diffs @@ -59,19 +131,9 @@ $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" . + "To: " . implode(', ', $emails_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"; @@ -120,7 +182,7 @@ fwrite($socket, "HELO svnserver\r\n" . "MAIL FROM:<this-will-bounce@php.net>\r\n"); -foreach ($email_to as $send_addr) { +foreach ($emails_to as $send_addr) { fwrite($socket, "RCPT TO:<{$send_addr}>\r\n"); } fwrite($socket, @@ -130,8 +192,4 @@ "QUIT\r\n"); fclose($socket); -// ----------------------------------------------------------------------------------------------------------------------------- -// Done! -exit(0); - ?> http://cvs.php.net/viewvc.cgi/SVNROOT/run-conversion.php?r1=1.56&r2=1.57&diff_format=u Index: SVNROOT/run-conversion.php diff -u SVNROOT/run-conversion.php:1.56 SVNROOT/run-conversion.php:1.57 --- SVNROOT/run-conversion.php:1.56 Mon Dec 8 18:52:28 2008 +++ SVNROOT/run-conversion.php Fri Dec 12 04:20:25 2008 @@ -7,7 +7,7 @@ // ----------------------------------------------------------------------------------------------------------------------------- // Constants -$version = substr('$Revision: 1.56 $', strlen('$Revision: '), -2); +$version = substr('$Revision: 1.57 $', strlen('$Revision: '), -2); $passes = array( 'processcvs', // Process CVS modules @@ -516,7 +516,7 @@ v(2, "Installing post-commit hook...\n"); @unlink("{$svnPath}/repository/hooks/post-commit"); - symlink("{$svnPath}/SVNROOT/commit-email.php", "{$svnPath}/repository/hooks/post-commit"); + symlink("{$svnPath}/SVNROOT/post-commit", "{$svnPath}/repository/hooks/post-commit"); v(1, "Done installing global administrative files.\n"); }
http://cvs.php.net/viewvc.cgi/SVNROOT/commit-email.php?r1=1.3&r2=1.4&diff_format=u Index: SVNROOT/commit-email.php diff -u SVNROOT/commit-email.php:1.3 SVNROOT/commit-email.php:1.4 --- SVNROOT/commit-email.php:1.3 Mon Dec 8 21:01:22 2008 +++ SVNROOT/commit-email.php Fri Dec 12 04:20:25 2008 @@ -1,41 +1,100 @@ #!/usr/local/bin/php <?php -// ----------------------------------------------------------------------------------------------------------------------------- -// Settings -error_reporting(E_ALL | E_STRICT); -date_default_timezone_set('UTC'); +// Note that this script is intended to be called from inside the post-commit +// hook. It makes some assumptions: $REPOS and $REV are defined, the +// run_svnlook() function is declared, $changed_paths and $dirs_changed are +// determined. // ----------------------------------------------------------------------------------------------------------------------------- // Constants -$version = substr('$Revision: 1.3 $', strlen('$Revision: '), -2); -$email_to = array('gwynne@php.net'); +$version = substr('$Revision: 1.4 $', strlen('$Revision: '), -2); $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; -} +$commit_email_list = array( + // FastCGI ISAPI + '|^php/fastcgi-isapi|' => array('shane@php.net', 'wez@php.net', 'edink@php.net'), + + // GTK + '|^gtk/php-gtk-web|' => array('gtk-webmaster@php.net'), + '|^gtk/php-gtk-doc|' => array('php-gtk-doc@lists.php.net'), + '|^gtk/php-gtk|' => array('php-gtk-cvs@lists.php.net'), + + // Web + '|^web/bugtracker|' => array('php-webmaster@lists.php.net'), + '|^web/presentations|' => array('pres@lists.php.net'), + '|^web/pres2|' => array('pres@lists.php.net'), + '|^web/php-|' => array('php-webmaster@lists.php.net'), + + // Zend/TSRM + '|^php/ZendAPI|' => array('zend-engine-cvs@lists.php.net', 'doc-cvs@lists.php.net'), + '|^php/php-src/ZendEngine2|' => array('zend-engine-cvs@lists.php.net'), + '|^php/php-src/TSRM|' => array('zend-engine-cvs@lists.php.net'), + + // phpdoc + '|^phpdoc/doc-base|' => array('doc-cvs@lists.php.net'), + '|^phpdoc/ar|' => array('doc-ar@lists.php.net'), + '|^phpdoc/bg|' => array('doc-bg@lists.php.net'), + '|^phpdoc/ca|' => array('doc-ca@lists.php.net'), + '|^phpdoc/cs|' => array('doc-cs@lists.php.net'), + '|^phpdoc/da|' => array('doc-da@lists.php.net'), + '|^phpdoc/de|' => array('doc-de@lists.php.net'), + '|^phpdoc/el|' => array('doc-el@lists.php.net'), + '|^phpdoc/es|' => array('doc-es@lists.php.net'), + '|^phpdoc/fa|' => array('doc-fa@lists.php.net'), + '|^phpdoc/fi|' => array('doc-fi@lists.php.net'), + '|^phpdoc/fr|' => array('doc-fr@lists.php.net'), + '|^phpdoc/he|' => array('doc-he@lists.php.net'), + '|^phpdoc/hk|' => array('doc-hk@lists.php.net'), + '|^phpdoc/hu|' => array('doc-hu@lists.php.net'), + '|^phpdoc/id|' => array('doc-id@lists.php.net'), + '|^phpdoc/it|' => array('doc-it@lists.php.net'), + '|^phpdoc/ja|' => array('doc-ja@lists.php.net'), + '|^phpdoc/kr|' => array('doc-kr@lists.php.net'), + '|^phpdoc/lt|' => array('doc-lt@lists.php.net'), + '|^phpdoc/nl|' => array('doc-nl@lists.php.net'), + '|^phpdoc/no|' => array('doc-no@lists.php.net'), + '|^phpdoc/pl|' => array('doc-pl@lists.php.net'), + '|^phpdoc/pt_BR|' => array('doc-pt-br@lists.php.net'), + '|^phpdoc/pt|' => array('doc-pt@lists.php.net'), + '|^phpdoc/ro|' => array('doc-ro@lists.php.net'), + '|^phpdoc/ru|' => array('doc-ru@lists.php.net'), + '|^phpdoc/sk|' => array('doc-sk@lists.php.net'), + '|^phpdoc/sl|' => array('doc-sl@lists.php.net'), + '|^phpdoc/sv|' => array('doc-sv@lists.php.net'), + '|^phpdoc/tr|' => array('doc-tr@lists.php.net'), + '|^phpdoc/tw|' => array('doc-tw@lists.php.net'), + '|^phpdoc/zh|' => array('doc-zh@lists.php.net'), + '|^phd|' => array('doc-cvs@list.php.net'), + '|^web/doc|' => array('doc-web@lists.php.net'), + + // PEAR + '|^pear/pearbot|' => array('pear-cvs@lists.php.net'), + '|^pear/peardoc/en/pecl|' => array('pear-doc@lists.php.net', 'doc-cvs@lists.php.net'), + '|^pear/peardoc|' => array('pear-doc@lists.php.net'), + '|^pear/pear-core|' => array('pear-cvs@lists.php.net', 'pear-core@lists.php.net'), + '|^pear/modules/installphars|' => array('pear-core@lists.php.net'), + '|^pear/modules|' => array('pear-cvs@lists.php.net'), + + // PECL + '|^php-src/pecl|' => array('pecl-cvs@lists.php.net'), + + // QA-web + '|^web/qa|' => array('php-qa@lists.php.net'), + + // GD + '|^gd|' => array('gd-cvs@lists.php.net'), + + // Misc + '|^php/php-lang|' => array('php-lang@lists.php.net'), + '|^web/embed|' => array('embed-cvs@lists.php.net'), + '|^php/php-objc|' => array('php-objc@lists.php.net'), + + // Internals + '|^systems|' => array('systems@php.net'), + '|^SVNROOT|' => array('svn-migration@lists.php.net'), + + '|^.|' => array('php-cvs@lists.php.net') +); // ----------------------------------------------------------------------------------------------------------------------------- // Get info from commit @@ -50,8 +109,21 @@ $from = 'svn@svn.php.net'; // ----------------------------------------------------------------------------------------------------------------------------- -// Build list of changes -$changed_paths = run_svnlook('changed'); +// Build list of e-mail addresses and parent changed path +$emails_to = array(); +$parent_path = $dirs_changed[0]; + +foreach ($dirs_changed as $changed_path) { + foreach ($commit_email_list as $regex => $email_list) { + if (preg_match($regex, $changed_path, $matches) === 1) { + $emails_to = array_merge($emails_to, $email_list); + } + } + if (strlen($changed_path) < strlen($parent_path)) { + $parent_path = $changed_path; + } +} +$emails_to = array_unique($emails_to); // ----------------------------------------------------------------------------------------------------------------------------- // Get diffs @@ -59,19 +131,9 @@ $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" . + "To: " . implode(', ', $emails_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"; @@ -120,7 +182,7 @@ fwrite($socket, "HELO svnserver\r\n" . "MAIL FROM:<this-will-bounce@php.net>\r\n"); -foreach ($email_to as $send_addr) { +foreach ($emails_to as $send_addr) { fwrite($socket, "RCPT TO:<{$send_addr}>\r\n"); } fwrite($socket, @@ -130,8 +192,4 @@ "QUIT\r\n"); fclose($socket); -// ----------------------------------------------------------------------------------------------------------------------------- -// Done! -exit(0); - ?> http://cvs.php.net/viewvc.cgi/SVNROOT/run-conversion.php?r1=1.56&r2=1.57&diff_format=u Index: SVNROOT/run-conversion.php diff -u SVNROOT/run-conversion.php:1.56 SVNROOT/run-conversion.php:1.57 --- SVNROOT/run-conversion.php:1.56 Mon Dec 8 18:52:28 2008 +++ SVNROOT/run-conversion.php Fri Dec 12 04:20:25 2008 @@ -7,7 +7,7 @@ // ----------------------------------------------------------------------------------------------------------------------------- // Constants -$version = substr('$Revision: 1.56 $', strlen('$Revision: '), -2); +$version = substr('$Revision: 1.57 $', strlen('$Revision: '), -2); $passes = array( 'processcvs', // Process CVS modules @@ -516,7 +516,7 @@ v(2, "Installing post-commit hook...\n"); @unlink("{$svnPath}/repository/hooks/post-commit"); - symlink("{$svnPath}/SVNROOT/commit-email.php", "{$svnPath}/repository/hooks/post-commit"); + symlink("{$svnPath}/SVNROOT/post-commit", "{$svnPath}/repository/hooks/post-commit"); v(1, "Done installing global administrative files.\n"); }