diff options
Diffstat (limited to 'cruise-control/web/log_wrapper.php')
-rw-r--r-- | cruise-control/web/log_wrapper.php | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/cruise-control/web/log_wrapper.php b/cruise-control/web/log_wrapper.php new file mode 100644 index 000000000..af03db016 --- /dev/null +++ b/cruise-control/web/log_wrapper.php @@ -0,0 +1,188 @@ +<?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; + +} + +?> |