<?php /** * lib/web-scripts/xref-ci.php * * This script compares 2 arbitrary git commits * and finds/reports new errors in changed files. * * @author Igor Gariev <*****@*****.**> * @copyright Copyright (c) 2013 Igor Gariev * @licence http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 */ $includeDir = "@php_dir@" == "@" . "php_dir@" ? dirname(__FILE__) . "/.." : "@php_dir@/XRef"; require_once "{$includeDir}/XRef.class.php"; $xref = new XRef(); $xref->loadPluginGroup("lint"); $scm = $xref->getSourceCodeManager(); $rev1 = isset($_REQUEST["rev1"]) ? preg_replace('#[^\\w\\-/}{ @]#', '', $_REQUEST["rev1"]) : ''; $rev2 = isset($_REQUEST["rev2"]) ? preg_replace('#[^\\w\\-/}{ @]#', '', $_REQUEST["rev2"]) : ''; if ($rev1 && $rev2) { $fileErrors = array(); $modified_files = $scm->getListOfModifiedFiles($rev1, $rev2); $file_provider1 = $scm->getFileProvider($rev1); $file_provider2 = $scm->getFileProvider($rev2); $lint_engine = XRef::getConfigValue("xref.project-check", true) ? new XRef_LintEngine_ProjectCheck($xref) : new XRef_LintEngine_Simple($xref); $errors = $lint_engine->getIncrementalReport($file_provider1, $file_provider2, $modified_files); } echo $xref->fillTemplate("ci-web.tmpl", array('rev1' => $rev1, 'rev2' => $rev2, 'fileErrors' => $errors));
*/ $includeDir = "@php_dir@" == "@" . "php_dir@" ? dirname(__FILE__) . "/.." : "@php_dir@/XRef"; require_once "{$includeDir}/XRef.class.php"; // web-server lint script $xref = new XRef(); $xref->loadPluginGroup("lint"); $sourcePlugin = $xref->getPluginById("files"); $css = $sourcePlugin->getDefaultCSS(); $textareaContent = '// put source code here'; $report = null; $exceptionMessage = null; $formattedText = null; if (isset($_REQUEST["source"]) && $_REQUEST["source"]) { $source = get_magic_quotes_gpc() ? stripslashes($_REQUEST["source"]) : $_REQUEST["source"]; try { $parsed_file = $xref->getParsedFile("unknown.php", $source); if (count($parsed_file->getTokens()) > 1) { $lint_engine = XRef::getConfigValue("xref.project-check", true) ? new XRef_LintEngine_ProjectCheck($xref) : new XRef_LintEngine_Simple($xref); $lint_engine->addParsedFile($parsed_file); $report = $lint_engine->collectReport(); $formattedText = $sourcePlugin->getFormattedText($parsed_file, ""); } else { $textareaContent = htmlspecialchars($source); } } catch (Exception $e) { $exceptionMessage = $e->getMessage(); $textareaContent = htmlspecialchars($source); } } echo $xref->fillTemplate('lint-web.tmpl', array('textareaContent' => $textareaContent, 'hasSource' => isset($source), 'formattedText' => $formattedText, 'exceptionMessage' => $exceptionMessage, 'report' => $report, 'css' => $css)); // vim: tabstop=4 expandtab
$files = $xref->filterFiles($file_provider->getFiles()); foreach ($files as $filename) { try { $file_content = $file_provider->getFileContent($filename); $pf = $xref->getParsedFile($filename, $file_content); foreach ($plugins as $pluginId => $plugin) { $plugin->generateFileReport($pf); } $numberOfFiles++; $numberOfCodeLines += $pf->getNumberOfLines(); $pf->release(); // help PHP garbage collector to free memory } catch (Exception $e) { error_log("Can't process file '{$filename}': " . $e->getMessage() . "\n"); } } // 2. Notify each plugin that all files are done foreach ($plugins as $pluginId => $plugin) { $plugin->generateTotalReport(); } // 3. Create index page $reports = array(); // report name --> report url foreach ($plugins as $pluginId => $plugin) { $reports = array_merge($reports, $plugin->getReportLink()); } ksort($reports); list($fh) = $xref->getOutputFileHandle("index", null); fwrite($fh, $xref->fillTemplate("doc-index.tmpl", array('reports' => $reports, 'date' => date(DATE_RFC850), 'numberOfFiles' => $numberOfFiles, 'numberOfCodeLines' => $numberOfCodeLines))); fclose($fh); // vim: tabstop=4 expandtab