cvs: pearweb /public_html release-upload.php
[email protected] ("Helgi ?ormar ?orbj?rnsson") Sun, 04 May 2008 00:21:49 -0000
| Newsgroups | php.pear.cvs,php.pear.core |
|---|---|
| Message-ID | <cvsdufuz1209860509@cvsserver> |
dufuz Sun May 4 00:21:49 2008 UTC
Modified files:
/pearweb/public_html release-upload.php
Log:
Request #13833 Mail bug reporters when a release is out that fixes their bugs
http://cvs.php.net/viewvc.cgi/pearweb/public_html/release-upload.php?r1=1.100&r2=1.101&diff_format=u
Index: pearweb/public_html/release-upload.php
diff -u pearweb/public_html/release-upload.php:1.100 pearweb/public_html/release-upload.php:1.101
--- pearweb/public_html/release-upload.php:1.100 Wed Mar 5 19:46:46 2008
+++ pearweb/public_html/release-upload.php Sun May 4 00:21:49 2008
@@ -15,7 +15,7 @@
+----------------------------------------------------------------------+
| Authors: |
+----------------------------------------------------------------------+
- $Id: release-upload.php,v 1.100 2008/03/05 19:46:46 dufuz Exp $
+ $Id: release-upload.php,v 1.101 2008/05/04 00:21:49 dufuz Exp $
*/
auth_require('pear.dev');
@@ -108,9 +108,11 @@
}
include_once 'pear-database-user.php';
- if (!auth_check('pear.admin') &&
+ if (
+ !auth_check('pear.admin') &&
!auth_check('pear.qa') &&
- !user::maintains($auth_user->handle, $pacid, 'lead')) {
+ !user::maintains($auth_user->handle, $pacid, 'lead')
+ ) {
$errors[] = 'You don\'t have permissions to upload this release.';
break;
}
@@ -121,9 +123,9 @@
$users = array();
foreach ($info->getMaintainers() as $user) {
$users[strtolower($user['handle'])] = array(
- 'role' => $user['role'],
- 'active' => !isset($user['active']) || $user['active'] == 'yes',
- );
+ 'role' => $user['role'],
+ 'active' => !isset($user['active']) || $user['active'] == 'yes',
+ );
}
include_once 'pear-database-maintainer.php';
@@ -163,9 +165,89 @@
PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, 'report_warning');
include_once 'pear-database-release.php';
- release::promote_v2($info, $file);
+ release::promote($info, $file);
PEAR::popErrorHandling();
+ // Roadmap thingo
+ require_once 'roadmap/info.php';
+
+ $sql = '
+ SELECT b.id, b.sdesc, b.email, b.reporter_name, b.bug_type, b.handle
+ FROM
+ bugdb b, bugdb_roadmap_link l, bugdb_roadmap r
+ WHERE
+ r.package = ? AND
+ r.roadmap_version = ? AND
+ l.roadmap_id = r.id AND
+ b.id = l.id AND
+ b.status = ?
+ ORDER BY b.bug_type, b.id';
+
+ $values = array($info->getPackage(), $info->getVersion(), 'Closed');
+ $bugs = $GLOBALS['dbh']->getAll($sql , $values, DB_FETCHMODE_ASSOC);
+
+ $sql = 'SELECT m.handle FROM maintains m, packages p WHERE p.id = m.package AND p.name = ?';
+ $m = $dbh->getCol($sql, 0, $package);
+
+ $bug_types = array('Bug', 'Documentation Bug');
+ $notes = array();
+ foreach ($bugs as $bug) {
+ // Ignoring bugs maintainers reported
+ if (in_array($bug['handle'], $m)) {
+ continue;
+ }
+
+ if (!isset($notes[$bug['email']]['note'])) {
+ $notes[$bug['email']]['note'] = '';
+ }
+
+ $type = in_array($bug['bug_type'], $bug_types) ? 'bugs' : 'features';
+ if (!isset($notes[$bug['email']][$type])) {
+ $notes[$bug['email']][$type] = '';
+ }
+
+ $summary = wordwrap($bug['sdesc'], 70);
+ // indent word-wrapped lines
+ $summary = implode("\n ", explode("\n", $summary));
+ $notes[$bug['email']]['name'] = $bug['reporter_name'];
+ $notes[$bug['email']][$type] .= " * ID #$bug[id]: $summary\n";
+ }
+
+ $email_header = "Hello {name},\n\n";
+ $email_header .= "We'd like to inform you that the following issues you reported have been addressed in the new version of {package}:\n";
+ $email_footer = "\nYou can get the new version via http://{channel}/package/{package}/download/{version}\n";
+ $email_footer .= "or install with pear install {package}{state} / pear upgrade {package}{state}";
+ $mail_headers = 'From: ' . SITE_BIG . ' QA <' . PEAR_QA_EMAIL .">\r\n";
+ $subject = '[' . SITE_BIG . '-BUG] Bug report submission follow up for package ' . $info->getPackage();
+ $state = $info->getState() == 'stable' ? '' : '-' . $state;
+
+ foreach ($notes as $email => $n) {
+ $find = array('{name}', '{package}');
+ $replace = array($n['name'], $info->getPackage());
+ $header = str_replace($find, $replace, $email_header);
+
+ $find = array('{channel}', '{package}', '{version}', '{state}');
+ $replace = array(PEAR_CHANNELNAME, $info->getPackage(), $info->getVersion(), $state);
+ $footer = str_replace($find, $replace, $email_footer);
+
+ $text = '';
+ if (isset($n['bugs'])) {
+ $text .= "\nFixed Bugs:\n";
+ $text .= $n['bugs'];
+ }
+
+ if (isset($n['features'])) {
+ $text .= "\nImplemented Features:\n";
+ $text .= $n['features'];
+ }
+
+ $body = $header . $text . $footer;
+ $to = $n['name'] . '<' . $email . '>';
+ if (!DEVBOX) {
+ mail($to, $subject, $body, $mail_headers, '-f ' . PEAR_BOUNCE_EMAIL);
+ }
+ }
+
$success = true;
$display_form = true;
$display_verification = false;
@@ -252,7 +334,7 @@
}
}
if ($info->getState() == 'stable') {
- $releases = package::info($info->getPackage(), 'releases', true);
+ $releases = package::info($info->getPackage(), 'releases');
if (!count($releases)) {
$errors[] = "The first release of a package must be 'alpha' or 'beta', not 'stable'." .
" Try releasing version 1.0.0RC1, state 'beta'";
@@ -299,13 +381,14 @@
{
global $dbh;
// It's a lead or user of the package
- $query = "SELECT m.handle
- FROM packages p, maintains m
- WHERE
- m.handle = ? AND
- p.id = m.package AND
- m.role = 'lead'";
- $res = $dbh->getOne($query, array($user));
+ $query = '
+ SELECT m.handle
+ FROM packages p, maintains m
+ WHERE
+ m.handle = ? AND
+ p.id = m.package AND
+ m.role = ?';
+ $res = $dbh->getOne($query, array($user, 'lead'));
if ($res !== null) {
return true;
}