Modified: web/php-rmtools/trunk/docroot/rm/index.php =================================================================== --- web/php-rmtools/trunk/docroot/rm/index.php 2010-01-14 16:21:22 UTC (rev 293550) +++ web/php-rmtools/trunk/docroot/rm/index.php 2010-01-14 17:45:37 UTC (rev 293551) @@ -29,6 +29,7 @@ $mode = 'error'; } } + switch ($mode) { case 'list': $nojs = filter_input(INPUT_GET, 'nojs', FILTER_VALIDATE_INT); @@ -53,6 +54,7 @@ if ($rev) { $revision = $svn->getOne($rev); } + if (!$revision) { if ($json) { header('HTTP/1.0 404 Not Found'); Modified: web/php-rmtools/trunk/include/Base.php =================================================================== --- web/php-rmtools/trunk/include/Base.php 2010-01-14 16:21:22 UTC (rev 293550) +++ web/php-rmtools/trunk/include/Base.php 2010-01-14 17:45:37 UTC (rev 293551) @@ -33,10 +33,12 @@ release_branch VARCHAR(32), dev_branch VARCHAR(32), status INTEGER, - first_revision INTEGER, - last_revision INTEGER, - last_snap_revision INTEGER, - last_update VARCHAR(32))')) { + dev_first_revision INTEGER, + dev_last_revision INTEGER, + dev_last_update VARCHAR(32), + release_last_revision INTEGER, + release_last_snap_revision INTEGER, + release_last_update VARCHAR(32))')) { throw new \Exception('Cannot initialize TABLE release'); } @@ -51,8 +53,8 @@ if (!$res || sqlite_num_rows($res) > 0) { Throw new \Exception($release . ' already exists'); } - - $res = sqlite_query($this->db, "INSERT INTO release (name, release_branch, dev_branch, first_revision) VALUES('" . + + $res = sqlite_query($this->db, "INSERT INTO release (name, release_branch, dev_branch, dev_first_revision) VALUES('" . sqlite_escape_string($release) . "','" . sqlite_escape_string($release_branch) . "','" . sqlite_escape_string($dev_branch) . "'," . (int)$first_revision . ")"); if (!$res) { @@ -74,12 +76,19 @@ } } - function setLatestRevisionForRelease($release, $revision) { + function setLatestRevisionForRelease($release, $dev_revision, $release_revision) { $release = sqlite_escape_string($release); - $revision = (int)$revision; - $res = sqlite_query($this->db, "UPDATE release SET last_revision=$revision WHERE name='$release'"); + $dev_revision = (int)$dev_revision; + $release_revision = (int)$release_revision; + if (!$dev_revision) { + Throw new \Exception('Invalid revision ' . $dev_revision); + } + if (!$release_revision) { + Throw new \Exception('Invalid revision ' . $release_revision); + } + $res = sqlite_query($this->db, "UPDATE release SET dev_last_revision=$dev_revision, release_last_revision=$release_revision WHERE name='$release'"); if (sqlite_changes($this->db) < 1) { - Throw new \Exception('Release not found ' . $release); + Throw new \Exception('Release not found or update failed for ' . $release); } } @@ -89,7 +98,7 @@ } $release = sqlite_escape_string($release); $date = sqlite_escape_string($date); - $res = sqlite_query($this->db, "UPDATE release SET last_update='$date' WHERE name='$release'"); + $res = sqlite_query($this->db, "UPDATE release SET release_last_update='$date', dev_last_update='$date' WHERE name='$release'"); if (sqlite_changes($this->db) < 1) { Throw new \Exception('Release not found ' . $release); @@ -104,7 +113,7 @@ Throw new \Exception('Invalid revision ' . $revision); } - $res = sqlite_query($this->db, "UPDATE release SET last_snap_revision=$revision WHERE name='$release'"); + $res = sqlite_query($this->db, "UPDATE release SET release_last_snap_revision=$revision WHERE name='$release'"); if (sqlite_changes($this->db) < 1) { Throw new \Exception('Release not found ' . $release); @@ -113,7 +122,10 @@ function getRelease($release) { $release = sqlite_escape_string($release); - $sql = "SELECT name, release_branch, dev_branch, status, first_revision, last_revision, last_update, last_snap_revision FROM release WHERE name='" . $release . "'"; + $sql = "SELECT name, release_branch, dev_branch, status, + dev_first_revision, dev_last_revision, dev_last_update, + release_last_revision, release_last_snap_revision, release_last_update + FROM release WHERE name='" . $release . "'"; $res = sqlite_query($this->db, $sql, SQLITE_ASSOC); if (!$res) { Throw new \Exception('Query failed for ' . $release); Modified: web/php-rmtools/trunk/include/Storage.php =================================================================== --- web/php-rmtools/trunk/include/Storage.php 2010-01-14 16:21:22 UTC (rev 293550) +++ web/php-rmtools/trunk/include/Storage.php 2010-01-14 17:45:37 UTC (rev 293551) @@ -7,7 +7,7 @@ protected $release = NULL; protected $dev_branch = NULL; protected $release_branch = NULL; - protected $first_revision = NULL; + protected $dev_first_revision = NULL; function __construct($release) { @@ -16,7 +16,7 @@ $release = $this->release = $svn->getRelease($release); $this->dev_branch = $release['dev_branch']; $this->release_branch = $release['release_branch']; - $this->first_revision = $release['first_revision']; + $this->dev_first_revision = $release['dev_first_revision']; $path = DB_PATH . '/' . $this->release_branch . '.sqlite'; @@ -53,23 +53,28 @@ function updateRelease() { $svn = new Svn; - $last_revision = $svn->update($this->dev_branch); + $dev_last_revision = $svn->update($this->dev_branch); + if ($this->dev_branch != $this->release_branch) { + $release_last_revision = $svn->update($this->release_branch); + } + $date_now = date('Y-m-d h:m O'); - if ($this->dev_branch == $this->release_branch) { - $this->release['last_update'] = date(DATE_RFC822); - $this->release['last_revision'] = $last_revision; - $this->base->setLatestRevisionForRelease($this->release['name'], $last_revision); - $this->base->setLastUpdateForRelease($this->release['name'], $this->release['last_update']); + if (0 && $this->dev_branch == $this->release_branch) { + $this->release['release_last_update'] = $this->release['dev_last_update'] = $date_now; + $this->release['dev_last_revision'] = $dev_last_revision; + $this->release['release_last_revision'] = $release_last_revision; + $this->base->setLatestRevisionForRelease($this->release['name'], $dev_last_revision, $release_last_revision); + $this->base->setLastUpdateForRelease($this->release['name'], $this->release['release_last_update']); return TRUE; } - $logxml = $svn->fetchLogFromBranch($this->dev_branch, $this->first_revision); + $log_xml = $svn->fetchLogFromBranch($this->dev_branch, $this->dev_first_revision); - if (!$logxml) { + if (!$log_xml) { return FALSE; } - foreach ($logxml->logentry as $v) { + foreach ($log_xml->logentry as $v) { $msg = (string) $v->msg; $msg = substr(substr($msg, 0, strpos($msg . "\n", "\n")), 0, 80); $rev = (string) $v['revision']; @@ -88,18 +93,20 @@ } } } else { - $res = sqlite_query($this->db, "INSERT INTO revision (revision, date, author, status, msg, comment, news) - VALUES('$rev' ,'" . $date . "','" . $author . "', 0, '" . sqlite_escape_string($msg) . "', '', '');"); + $res = sqlite_query($this->db, "INSERT INTO revision (revision, release, date, author, status, msg, comment, news) + VALUES('$rev' , '" . $this->release['name'] . "','" . $date . "','" . $author . "', 0, '" . sqlite_escape_string($msg) . "', '', '');"); if (!$res) { Throw new \Exception('Insert query failed for ' . $rev); } } } - $this->release['last_revision'] = $last_revision; - $this->base->setLatestRevisionForRelease($this->release['name'], $this->release['last_revision']); - $this->release['last_update'] = date(DATE_RFC822); - $this->base->setLastUpdateForRelease($this->release['name'], $this->release['last_update']); + $this->release['dev_last_revision'] = $dev_last_revision; + $this->release['release_last_revision'] = ($this->dev_branch == $this->release_branch) ? $dev_last_revision : $release_last_revision; + + $this->base->setLatestRevisionForRelease($this->release['name'], $this->release['dev_last_revision'], $this->release['release_last_revision']); + $this->release['last_update'] = $date_now ; + $this->base->setLastUpdateForRelease($this->release['name'], $date_now); return TRUE; } @@ -112,7 +119,7 @@ $filename = SNAPS_PATH . '/php-' . $this->release['name'] . '-src-' . date("YmdHi", $time) . '.zip'; } - if ($this->release['last_revision'] == $this->release['last_snap_revision'] && !$force) { + if ($this->release['release_last_revision'] == $this->release['release_last_snap_revision'] && !$force) { return TRUE; } @@ -134,7 +141,7 @@ $text = " PHP source snapshot generated on $now. The last revision in this snap is - " . $this->release['last_revision']; + " . $this->release['release_last_revision']; file_put_contents("SNAPSHOT.txt", $text); $cmd = "zip -r $snaps_archive_name *"; @@ -145,8 +152,8 @@ throw new \Exception('Fail to create archive ' . $snaps_archive_name); } - $this->base->setLastRevisionSnapForRelease($this->release['name'], $this->release['last_revision']); - $this->release['last_snap_revision'] = $this->release['last_revision']; + $this->base->setLastRevisionSnapForRelease($this->release['name'], $this->release['release_last_revision']); + $this->release['release_last_snap_revision'] = $this->release['release_last_revision']; return $filename; } @@ -165,7 +172,7 @@ if ($this->release['release_branch'] == $this->release['dev_branch']) { return NULL; } - $res = sqlite_query($this->db, 'SELECT * FROM revision ORDER by revision', SQLITE_ASSOC); + $res = sqlite_query($this->db, "SELECT * FROM revision WHERE release='" . $this->release['name'] . "' ORDER by revision", SQLITE_ASSOC); if ($res && sqlite_num_rows($res) > 0) { return sqlite_fetch_all($res); } @@ -182,8 +189,8 @@ function updateRevision($revision) { $error = FALSE; - if (!isset($revision['status']) || !isset($revision['comment']) || !isset($revision['news']) || ((int)$revision['revision'] < $this->release['first_revision'])) { - Throw new \Exception('Invalid revision ' . $revision); + if (!isset($revision['status']) || !isset($revision['comment']) || !isset($revision['news']) || ((int)$revision['revision'] < $this->release['dev_first_revision'])) { + Throw new \Exception('Invalid revision, incomplete update'); } $sql = "UPDATE revision Modified: web/php-rmtools/trunk/include/Svn.php =================================================================== --- web/php-rmtools/trunk/include/Svn.php 2010-01-14 16:21:22 UTC (rev 293550) +++ web/php-rmtools/trunk/include/Svn.php 2010-01-14 17:45:37 UTC (rev 293551) @@ -66,9 +66,9 @@ throw new \Exception('svn log failed ' . $path); } - $revision = (int)$sx->entry['revision']; + $revision = (int)$sx->entry[0]->commit['revision']; if (!$revision) { - throw new \Exception('svn log failed ' . $path); + throw new \Exception('svn log failed, invalid revision ' . $revision . ' in ' . $path); } return $revision; } Modified: web/php-rmtools/trunk/template/revision_list_yui.php =================================================================== --- web/php-rmtools/trunk/template/revision_list_yui.php 2010-01-14 16:21:22 UTC (rev 293550) +++ web/php-rmtools/trunk/template/revision_list_yui.php 2010-01-14 17:45:37 UTC (rev 293551) @@ -1,6 +1,6 @@