mosesdecoder/cruise-control/web/log_wrapper.php
2011-10-21 22:36:20 +01:00

189 lines
3.8 KiB
PHP

<?php
class StaticData
{
const logs_path = "./data/";
}
function get_all_branch_names()
{
$branches = array();
$dir_hdl = opendir(StaticData::logs_path);
while (($file = readdir($dir_hdl)) !== false) {
if (($pos = strpos($file, ".revlist")) > 0) {
array_push($branches, substr($file, 0, $pos));
}
}
return $branches;
}
class Branch
{
public function __construct($name)
{
$this->name = $name;
$this->create_revlist_hdl();
}
public function get_next_commit()
{
return new Commit( chop( fgets($this->revlist_hdl) ) );
}
public function set_line($line)
{
$this->reset();
$index = 0;
while ($this->revlist_hdl && $index < $line) {
fgets($this->revlist_hdl);
$index++;
}
}
public function reset()
{
fclose($this->revlist_hdl);
$this->create_revlist_hdl();
}
private function create_revlist_hdl()
{
$this->revlist_hdl = fopen(StaticData::logs_path . "/" . $this->name . ".revlist", "r");
}
private $name;
private $revlist_hdl;
}
class Commit
{
public function __construct($name)
{
$this->name = $name;
}
public function read_log()
{
if (! $this->was_tested()) {
return;
}
$log_hdl = fopen(StaticData::logs_path . "/" . substr($this->name, 0, 1) . "/" . $this->name . ".log", "r");
while (($line = fgets($log_hdl)) !== false) {
if (preg_match('/tests passed/', $line)) {
$this->passed_percent = substr($line, 0, strpos('%', $line));
}
else if (preg_match('/INVESTIGATE THESE FAILED TESTS/', $line)) {
$this->failed_tests = substr($line, 39);
}
else if (! $this->is_ok() && preg_match('/## Status:/', $line)) {
$this->failed_at = substr($line, 16);
}
}
}
public function read_info()
{
$info_hdl = fopen(StaticData::logs_path . "/" . substr($this->name, 0, 1) . "/" . $this->name . ".info", "r");
while (($line = fgets($info_hdl)) !== false) {
if (preg_match('/Author:/', $line)) {
$this->author = substr("$line", 7);
}
else if (preg_match('/Date:/', $line)) {
$this->timestamp = substr("$line", 12);
break;
}
}
while (($line = fgets($info_hdl)) !== false) {
$this->message .= chop($line);
}
$this->message = preg_replace('/\s+/', ' ', $this->message);
}
public function was_tested()
{
return file_exists(StaticData::logs_path . "/" . substr($this->name, 0, 1) . "/" . $this->name . ".log");
}
public function is_ok()
{
if (! $this->was_tested()) {
return false;
} else {
return file_exists(StaticData::logs_path . "/" . substr($this->name, 0, 1) . "/" . $this->name . ".OK");
}
}
public function get_status()
{
return $this->was_tested()
? ($this->is_ok() ? "OK" : "Failed: " . $this->get_failed_at()) : "Not tested";
}
public function get_passed_percent()
{
return $this->passed_percent;
}
public function get_failed_tests()
{
return $this->failed_tests;
}
public function get_failed_at()
{
return $this->failed_at;
}
public function get_message()
{
return $this->message;
}
public function get_author()
{
return $this->author;
}
public function get_timestamp()
{
return $this->timestamp;
}
public function get_name()
{
return $this->name;
}
public function get_log_file()
{
return "show_commit.php?commit_id=$this->name&type=log";
}
public function get_info_file()
{
return "show_commit.php?commit_id=$this->name&type=info";
}
private function open_log()
{
return fopen($this->get_log_file());
}
private function open_info()
{
return fopen($this->get_info_file());
}
private $name;
private $passed_percent;
private $failed_tests;
private $failed_at;
private $message;
private $author;
private $timestamp;
}
?>