From f33f0a4512dbdff69b84120152d7db831c5625dc Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Thu, 15 Oct 2015 14:23:55 +0100 Subject: [PATCH] Fixes --- .../20151014091859_errors_table.php | 133 ------------- .../20151015124825_convert_errors.php | 183 ++++++++++++++++++ PHPCI/Model/Build/GithubBuild.php | 2 +- PHPCI/Plugin/PhpCpd.php | 2 - PHPCI/Store/BuildMetaStore.php | 5 +- PHPCI/View/Build/errors.phtml | 1 + 6 files changed, 187 insertions(+), 139 deletions(-) create mode 100644 PHPCI/Migrations/20151015124825_convert_errors.php diff --git a/PHPCI/Migrations/20151014091859_errors_table.php b/PHPCI/Migrations/20151014091859_errors_table.php index 9369c772..a064f6e5 100644 --- a/PHPCI/Migrations/20151014091859_errors_table.php +++ b/PHPCI/Migrations/20151014091859_errors_table.php @@ -2,21 +2,9 @@ use Phinx\Migration\AbstractMigration; use Phinx\Db\Adapter\MysqlAdapter; -use PHPCI\Model\BuildMeta; -use PHPCI\Model\BuildError; class ErrorsTable extends AbstractMigration { - /** - * @var \PHPCI\Store\BuildMetaStore - */ - protected $metaStore; - - /** - * @var \PHPCI\Store\BuildErrorStore - */ - protected $errorStore; - public function change() { $table = $this->table('build_error'); @@ -32,126 +20,5 @@ class ErrorsTable extends AbstractMigration $table->addForeignKey('build_id', 'build', 'id', array('delete'=> 'CASCADE', 'update' => 'CASCADE')); $table->save(); - $this->updateBuildMeta(); - } - - protected function updateBuildMeta() - { - $start = 0; - $limit = 100; - $count = 100; - - $this->metaStore = \b8\Store\Factory::getStore('BuildMeta'); - $this->errorStore = \b8\Store\Factory::getStore('BuildError'); - - while ($count == 100) { - $data = $this->metaStore->getErrorsForUpgrade($start, $limit); - $start += 100; - $count = count($data); - - /** @var \PHPCI\Model\BuildMeta $meta */ - foreach ($data as $meta) { - try { - switch ($meta->getMetaKey()) { - case 'phpmd-data': - $this->processPhpMdMeta($meta); - break; - case 'phpcs-data': - $this->processPhpCsMeta($meta); - break; - case 'phpunit-data': - $this->processPhpUnitMeta($meta); - break; - case 'phpdoccheck-data': - $this->processPhpDocCheckMeta($meta); - break; - } - } catch (\Exception $ex) {} - - $this->metaStore->delete($meta); - } - } - } - - protected function processPhpMdMeta(BuildMeta $meta) - { - $data = json_decode($meta->getMetaValue(), true); - - if (is_array($data) && count($data)) { - foreach ($data as $error) { - $buildError = new BuildError(); - $buildError->setBuildId($meta->getBuildId()); - $buildError->setPlugin('php_mess_detector'); - $buildError->setCreatedDate(new \DateTime()); - $buildError->setFile($error['file']); - $buildError->setLineStart($error['line_start']); - $buildError->setLineEnd($error['line_end']); - $buildError->setSeverity(BuildError::SEVERITY_HIGH); - $buildError->setMessage($error['message']); - - $this->errorStore->save($buildError); - } - } - } - - protected function processPhpCsMeta(BuildMeta $meta) - { - $data = json_decode($meta->getMetaValue(), true); - - if (is_array($data) && count($data)) { - foreach ($data as $error) { - $buildError = new BuildError(); - $buildError->setBuildId($meta->getBuildId()); - $buildError->setPlugin('php_code_sniffer'); - $buildError->setCreatedDate(new \DateTime()); - $buildError->setFile($error['file']); - $buildError->setLineStart($error['line']); - $buildError->setLineEnd($error['line']); - $buildError->setMessage($error['message']); - - switch ($error['type']) { - case 'ERROR': - $buildError->setSeverity(BuildError::SEVERITY_HIGH); - break; - - case 'WARNING': - $buildError->setSeverity(BuildError::SEVERITY_LOW); - break; - } - - $this->errorStore->save($buildError); - } - } - } - - protected function processPhpDocCheckMeta(BuildMeta $meta) - { - $data = json_decode($meta->getMetaValue(), true); - - if (is_array($data) && count($data)) { - foreach ($data as $error) { - $buildError = new BuildError(); - $buildError->setBuildId($meta->getBuildId()); - $buildError->setPlugin('php_docblock_checker'); - $buildError->setCreatedDate(new \DateTime()); - $buildError->setFile($error['file']); - $buildError->setLineStart($error['line']); - $buildError->setLineEnd($error['line']); - - switch ($error['type']) { - case 'method': - $buildError->setMessage($error['class'] . '::' . $error['method'] . ' is missing a docblock.'); - $buildError->setSeverity(BuildError::SEVERITY_NORMAL); - break; - - case 'class': - $buildError->setMessage('Class ' . $error['class'] . ' is missing a docblock.'); - $buildError->setSeverity(BuildError::SEVERITY_LOW); - break; - } - - $this->errorStore->save($buildError); - } - } } } diff --git a/PHPCI/Migrations/20151015124825_convert_errors.php b/PHPCI/Migrations/20151015124825_convert_errors.php new file mode 100644 index 00000000..3622bf14 --- /dev/null +++ b/PHPCI/Migrations/20151015124825_convert_errors.php @@ -0,0 +1,183 @@ +metaStore = \b8\Store\Factory::getStore('BuildMeta'); + $this->errorStore = \b8\Store\Factory::getStore('BuildError'); + + while ($count == 100) { + $data = $this->metaStore->getErrorsForUpgrade(100); + $count = count($data); + + /** @var \PHPCI\Model\BuildMeta $meta */ + foreach ($data as $meta) { + try { + switch ($meta->getMetaKey()) { + case 'phpmd-data': + $this->processPhpMdMeta($meta); + break; + + case 'phpcs-data': + $this->processPhpCsMeta($meta); + break; + + case 'phpdoccheck-data': + $this->processPhpDocCheckMeta($meta); + break; + + case 'phpcpd-data': + $this->processPhpCpdMeta($meta); + break; + + case 'technicaldebt-data': + $this->processTechnicalDebtMeta($meta); + break; + } + } catch (\Exception $ex) {} + + $this->metaStore->delete($meta); + } + } + } + + protected function processPhpMdMeta(BuildMeta $meta) + { + $data = json_decode($meta->getMetaValue(), true); + + if (is_array($data) && count($data)) { + foreach ($data as $error) { + $buildError = new BuildError(); + $buildError->setBuildId($meta->getBuildId()); + $buildError->setPlugin('php_mess_detector'); + $buildError->setCreatedDate(new \DateTime()); + $buildError->setFile($error['file']); + $buildError->setLineStart($error['line_start']); + $buildError->setLineEnd($error['line_end']); + $buildError->setSeverity(BuildError::SEVERITY_HIGH); + $buildError->setMessage($error['message']); + + $this->errorStore->save($buildError); + } + } + } + + protected function processPhpCsMeta(BuildMeta $meta) + { + $data = json_decode($meta->getMetaValue(), true); + + if (is_array($data) && count($data)) { + foreach ($data as $error) { + $buildError = new BuildError(); + $buildError->setBuildId($meta->getBuildId()); + $buildError->setPlugin('php_code_sniffer'); + $buildError->setCreatedDate(new \DateTime()); + $buildError->setFile($error['file']); + $buildError->setLineStart($error['line']); + $buildError->setLineEnd($error['line']); + $buildError->setMessage($error['message']); + + switch ($error['type']) { + case 'ERROR': + $buildError->setSeverity(BuildError::SEVERITY_HIGH); + break; + + case 'WARNING': + $buildError->setSeverity(BuildError::SEVERITY_LOW); + break; + } + + $this->errorStore->save($buildError); + } + } + } + + protected function processPhpDocCheckMeta(BuildMeta $meta) + { + $data = json_decode($meta->getMetaValue(), true); + + if (is_array($data) && count($data)) { + foreach ($data as $error) { + $buildError = new BuildError(); + $buildError->setBuildId($meta->getBuildId()); + $buildError->setPlugin('php_docblock_checker'); + $buildError->setCreatedDate(new \DateTime()); + $buildError->setFile($error['file']); + $buildError->setLineStart($error['line']); + $buildError->setLineEnd($error['line']); + + switch ($error['type']) { + case 'method': + $buildError->setMessage($error['class'] . '::' . $error['method'] . ' is missing a docblock.'); + $buildError->setSeverity(BuildError::SEVERITY_NORMAL); + break; + + case 'class': + $buildError->setMessage('Class ' . $error['class'] . ' is missing a docblock.'); + $buildError->setSeverity(BuildError::SEVERITY_LOW); + break; + } + + $this->errorStore->save($buildError); + } + } + } + + protected function processPhpCpdMeta(BuildMeta $meta) + { + $data = json_decode($meta->getMetaValue(), true); + + if (is_array($data) && count($data)) { + foreach ($data as $error) { + $buildError = new BuildError(); + $buildError->setBuildId($meta->getBuildId()); + $buildError->setPlugin('php_cpd'); + $buildError->setCreatedDate(new \DateTime()); + $buildError->setFile($error['file']); + $buildError->setLineStart($error['line_start']); + $buildError->setLineEnd($error['line_end']); + $buildError->setSeverity(BuildError::SEVERITY_NORMAL); + $buildError->setMessage('Copy and paste detected.'); + + $this->errorStore->save($buildError); + } + } + } + + protected function processTechnicalDebtMeta(BuildMeta $meta) + { + $data = json_decode($meta->getMetaValue(), true); + + if (is_array($data) && count($data)) { + foreach ($data as $error) { + $buildError = new BuildError(); + $buildError->setBuildId($meta->getBuildId()); + $buildError->setPlugin('technical_debt'); + $buildError->setCreatedDate(new \DateTime()); + $buildError->setFile($error['file']); + $buildError->setLineStart($error['line']); + $buildError->setSeverity(BuildError::SEVERITY_NORMAL); + $buildError->setMessage($error['message']); + + $this->errorStore->save($buildError); + } + } + } +} diff --git a/PHPCI/Model/Build/GithubBuild.php b/PHPCI/Model/Build/GithubBuild.php index 4bb9a73b..a9a18913 100644 --- a/PHPCI/Model/Build/GithubBuild.php +++ b/PHPCI/Model/Build/GithubBuild.php @@ -151,7 +151,7 @@ class GithubBuild extends RemoteGitBuild $link = 'https://github.com/' . $reference . '/'; $link .= 'blob/' . $branch . '/'; $link .= '{FILE}'; - $link .= '#L{LINE}'; + $link .= '#L{LINE}-L{LINE_END}'; return $link; } diff --git a/PHPCI/Plugin/PhpCpd.php b/PHPCI/Plugin/PhpCpd.php index c995bcc6..cb766a16 100644 --- a/PHPCI/Plugin/PhpCpd.php +++ b/PHPCI/Plugin/PhpCpd.php @@ -144,8 +144,6 @@ CPD; $file['line'], (int) $file['line'] + (int) $duplication['lines'] ); - $this->build->reportError($this->phpci, $fileName, $file['line'], $message); - } $warnings++; diff --git a/PHPCI/Store/BuildMetaStore.php b/PHPCI/Store/BuildMetaStore.php index 15424f82..f932bc11 100644 --- a/PHPCI/Store/BuildMetaStore.php +++ b/PHPCI/Store/BuildMetaStore.php @@ -25,15 +25,14 @@ class BuildMetaStore extends BuildMetaStoreBase * @param $limit * @return array */ - public function getErrorsForUpgrade($start, $limit) + public function getErrorsForUpgrade($limit) { $query = 'SELECT * FROM build_meta WHERE meta_key IN (\'phpmd-data\', \'phpcs-data\', \'phpdoccheck-data\') - ORDER BY id ASC LIMIT :start, :limit'; + ORDER BY id ASC LIMIT :limit'; $stmt = Database::getConnection('read')->prepare($query); - $stmt->bindValue(':start', $start, \PDO::PARAM_INT); $stmt->bindValue(':limit', $limit, \PDO::PARAM_INT); if ($stmt->execute()) { diff --git a/PHPCI/View/Build/errors.phtml b/PHPCI/View/Build/errors.phtml index 8b048289..04ab9c25 100644 --- a/PHPCI/View/Build/errors.phtml +++ b/PHPCI/View/Build/errors.phtml @@ -8,6 +8,7 @@ foreach ($errors as $error): $link = str_replace('{FILE}', $error->getFile(), $linkTemplate); $link = str_replace('{LINE}', $error->getLineStart(), $link); + $link = str_replace('{LINE_END}', $error->getLineEnd(), $link); ?>