| <?php | |
| require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); | |
| require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); | |
| require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); | |
| $App= new App(); | |
| $Nav= new Nav(); | |
| $Menu= new Menu(); | |
| include_once ($App->getprojectCommon()); | |
| internalUseOnly(); | |
| if (is_array($projects)) | |
| { | |
| $projectArray= getProjectArray($projects, $extraprojects, $nodownloads, $PR); | |
| $tmp= array_keys($projectArray); | |
| $proj= "/" . (isset ($_GET["project"]) && preg_match("/^(?:" . join("|", $projects) . ")$/", $_GET["project"]) ? $_GET["project"] : (isset($tmp[0]) && isset($projectArray[$tmp[0]]) ? $projectArray[$tmp[0]] : "")); | |
| } | |
| else | |
| { | |
| $proj= ""; | |
| } | |
| $projct= preg_replace("#^/#", "", $proj); | |
| /* from $_GET */ | |
| if (!isset ($params)) | |
| { | |
| $params= array ( | |
| "build" => "#^\d+\.\d+\.\d+/[IMNRS]\d{12}/$#" | |
| ); | |
| } | |
| $PWD = getPWD(($PR == $projct ? $projct : "$PR/$projct") . "/downloads/drops"); // see scripts.php | |
| /* check these files, %s replaced with param from above */ | |
| if (!isset ($files)) | |
| { | |
| $files= array ( | |
| "build" => array ($PWD . "/%sbuildlog.txt") | |
| ); | |
| } | |
| /* replace these values with key */ | |
| if (!isset ($reps)) | |
| { | |
| $reps= array ( | |
| "o.e.$projct" => "org.eclipse.$projct", | |
| "o.e.e.$projct" => "org.eclipse.emf.$projct", | |
| "o.e.mdt" => "org.eclipse.mdt", | |
| "o.e.m.c.r" => "org.eclipse.modeling.common.releng", | |
| "o.e.r" => "org.eclipse.releng", | |
| "dd" => "/home/www-data/build/$PR/${projct}/downloads/drops", | |
| "dm" => "download.eclipse.org/modeling", | |
| "de" => "download.eclipse.org/eclipse", | |
| "dte" => "download.eclipse.org/technology", | |
| "dto" => "download.eclipse.org/tools" | |
| ); | |
| } | |
| /* apply span class="key" */ | |
| $hl= array ( | |
| "error" => "/(fail(?:ure)?|error|warning|could not|No such|cannot|usage:)/iS", //S for study (huge speed boost here) | |
| "fail" => "/(BUILD FAILED)/", | |
| "success" => "/(BUILD SUCCESSFUL)/" | |
| ); | |
| /* remove these lines */ | |
| $filter= array ( | |
| "/^\[CVS .+\] U.+$/" => "", | |
| "/^s+\n$/" => "" | |
| ); | |
| $f = null; | |
| foreach (array_keys($params) as $z) | |
| { | |
| if (isset ($_GET[$z]) && preg_match($params[$z], $_GET[$z])) | |
| { | |
| foreach ($files[$z] as $y) | |
| { | |
| $f = sprintf($y, $_GET[$z]); | |
| $args[]= "$z=" . $_GET[$z]; | |
| if (!is_file($f) || !is_readable($f)) | |
| { | |
| print "<b>Error:</b> " . (is_numeric($debug) && $debug > 0 ? $f : preg_replace("#.+/$PR/(.+)#", "$1", $f)) . " is not a file or is not readable.\n"; | |
| exit; | |
| } | |
| } | |
| } | |
| } | |
| if (isset ($f)) | |
| { | |
| $step = isset ($_GET["step"]) && is_numeric($_GET["step"]) ? $_GET["step"] : 50; // how many lines to display? | |
| $maxlines = exec("wc -l $f"); $maxlines= preg_replace("/[\t\ \n]*(\d+)[\t\ \n]+.+/", "$1", $maxlines); | |
| $offset = isset ($_GET["offset"]) && is_numeric($_GET["offset"]) ? $_GET["offset"] : (isset ($_GET["tail"]) ? $maxlines - $step : 0); | |
| if ($offset > 0) | |
| { | |
| exec("head -n" . ($step + $offset) . " $f | tail -n$step", $log); | |
| } | |
| else | |
| { | |
| exec("head -n" . $step . " $f", $log); | |
| } | |
| } | |
| else | |
| { | |
| print "Sorry, no log found.\n"; | |
| exit; | |
| } | |
| ob_start(); | |
| print "<div id=\"midcolumn\">\n"; | |
| options($args, $f); | |
| /* batching all of these into one preg_replace is worth a very large (nearly an order of magnitude) speed boost */ | |
| $matches= preg_replace("/^(.+)$/", "!($1)!", array_values($reps)); | |
| $replacements= preg_replace("/^(.+)$/", "<abbr title=\"\\\$1\">$1</abbr>", array_keys($reps)); | |
| $matches= array_merge($matches, $hl); | |
| $replacements= array_merge($replacements, preg_replace("/^(.+)$/", "<span class=\"$1\">\\\$1</span>", array_keys($hl))); | |
| $matches= array_merge($matches, array_keys($filter)); | |
| $replacements= array_merge($replacements, $filter); | |
| $log2 = array(); foreach ($log as $line) { $log2[] = htmlspecialchars($line); } $log = $log2; unset($log2); # fix HTML chars that break page rendering | |
| $log= preg_replace($matches, $replacements, $log); | |
| $i= $offset; | |
| foreach ($log as $z) | |
| { | |
| $i++; | |
| if ($z) | |
| { | |
| print "<pre><a name=\"l$i\" href=\"#l$i\">$i</a>" . wordwrap($z) . "</pre>\n"; | |
| } | |
| } | |
| options($args, $f); | |
| print "</div>\n"; | |
| $html= ob_get_contents(); | |
| ob_end_clean(); | |
| $pageTitle= "Eclipse Modeling - Log Viewer"; | |
| $pageKeywords= ""; | |
| $pageAuthor= "Neil Skrypuch, Nick Boldt"; | |
| $App->AddExtraHtmlHeader("<link rel=\"stylesheet\" type=\"text/css\" href=\"/modeling/includes/log-viewer.css\"/>\n"); | |
| $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); | |
| function options($args, $f) | |
| { | |
| global $offset, $step, $maxlines, $projct; | |
| print "<div class=\"options\">\n"; | |
| print "<a href=\"?project=$projct&" . join("&", $args) . "&step=$step\"><< 0 - $step</a>"; | |
| if ($offset - $step >= 0) | |
| { | |
| print "<a href=\"?project=$projct&" . join("&", $args) . "&offset=" . ($offset - $step) . "&step=$step\">< " . ($offset - $step) . " to " . ($offset) . "</a>"; | |
| } | |
| else | |
| { | |
| print "<a href=\"?project=$projct&" . join("&", $args) . "&step=$step\">< 0 - $step</a>"; | |
| } | |
| $step2= $maxlines - $offset - $step; | |
| if ($offset + $step + $step <= $maxlines) | |
| { | |
| print "<a href=\"?project=$projct&" . join("&", $args) . "&offset=" . ($offset + $step) . "&step=$step\">" . ($offset + $step) . " to " . ($offset + $step + $step) . " ></a>"; | |
| } | |
| else | |
| if ($offset + $step <= $maxlines && $step2 > 0) | |
| { | |
| print "<a href=\"?project=$projct&" . join("&", $args) . "&offset=" . ($offset + $step) . "&step=$step2\">" . ($offset + $step) . " to " . ($maxlines) . " ></a>"; | |
| } | |
| else | |
| { | |
| print "<a href=\"?project=$projct&" . join("&", $args) . "&offset=" . ($maxlines - $step) . "&step=$step\">" . ($maxlines - $step) . " to " . ($maxlines) . " ></a>"; | |
| } | |
| print "<a href=\"?project=$projct&" . join("&", $args) . "&offset=" . ($maxlines - $step) . "&step=$step\">" . ($maxlines - $step) . " to " . ($maxlines) . " >></a>"; | |
| print "<a href=\"" . preg_replace("#^" . $_SERVER['DOCUMENT_ROOT'] . "|/home/www-data/build#", "", $f) . "\">unformatted log (" . trim(pretty_size(filesize("$f"))) . ")</a>"; | |
| print "</div>\n"; | |
| } | |
| ?> |